Preheat the oven to 425°F. Add tomatoes and onions to a baking sheet. Toss with olive oil, salt, and pepper. Roast for 30 minutes, until the tomatoes begin to wrinkle and char. (If using canned tomatoes, skip to step 2).
In a stockpot over medium heat, melt butter. Add garlic cloves, and move around frequently to cook garlic until fragrant, about 1 minute. (If using canned tomatoes, add onions alongside the garlic with a big pinch of salt, and cook until onions are softened and translucent about 5 minutes.)
Once the garlic is fragrant, immediately add the tomatoes and onions to cool off the garlic to prevent it from burning. Add in broth or stock, along with salt, pepper, and Italian seasoning. Bring mixture to a boil, then reduce to a simmer and cover. Allow mixture to simmer for 10 minutes.
Add in optional basil, and stir to wilt. Using a blender or an immersion blender, blend the mixture until smooth.
Reduce heat to low, then stir in heavy cream if using to warm through. Slowly add in freshly grated parmesan cheese in batches, and stir to melt completely before adding more cheese.
Adjust seasonings to taste, then serve with heavy cream, olive oil, salt, pepper, basil, and parmesan. Enjoy!
Store leftovers in an airtight container in the fridge for up to 5 days.