Place the poblano peppers and corn on a cast-iron grill pan under the broiler.
Roast until the poblanos are charred and the corn has some roasted color, turning as needed for even roasting.
Transfer the roasted poblanos to a bowl and cover with plastic wrap. Let them steam for about 5 minutes.
Carefully peel away the charred skin using a knife or a spoon.
Cut off the stems and slice the poblanos lengthwise. Remove the seeds and veins, then chop the peppers. Reserve a small amount for garnish.
If using corn on the cob, cut the kernels from the cob. Reserve a small amount of roasted corn for garnish.
Melt the butter in a large stockpot over medium heat. Add the diced onion and cook for 1 minute, or until translucent.
Add the roasted poblanos, roasted corn, and garlic. Cook for 3–4 minutes, stirring occasionally.
Pour in the chicken broth and evaporated milk.
Use an immersion blender to blend the soup until smooth.
If using a regular blender, let the soup cool slightly before carefully transferring it to the blender. Work in batches if needed.
Cover the pot and reduce the heat to low. Simmer for 5 minutes.
Stir in the heavy cream and heat for another 1–2 minutes.
Do not let the soup come to a hard boil.
Taste and add more salt if needed.
Ladle the soup into bowls and top with the reserved roasted poblano and corn.
Serve warm and enjoy!