Heat olive oil or butter in a large pot over medium heat.
Add diced onions and cook until soft (about 5 minutes).
Stir in minced garlic and cook for 1 minute until fragrant.
Add crushed tomatoes, broth, sugar, salt, pepper, basil, and red pepper flakes (if using).
Bring to a boil, then reduce heat and simmer for 20 minutes, stirring occasionally.
Use an immersion blender to puree the soup until smooth (or carefully transfer to a blender in batches).
Stir in heavy cream and simmer for 5 more minutes (do not boil).
Taste and add more salt, sugar, or pepper if needed.
Ladle into bowls and garnish with fresh basil, a swirl of cream, or croutons.