In a large pot over medium heat, heat olive oil. Add chopped onion and cook for 2–3 minutes until softened. Stir in garlic and cook for 30–60 seconds, just until fragrant.
Stir in chopped fresh tomatoes (or canned tomatoes with juices) and sugar. Cook for about 5 minutes, stirring occasionally, until tomatoes begin to break down.
Pour in 1½ cups broth, salt, and pepper. Bring to a simmer and cook uncovered for 15–20 minutes, allowing flavors to develop. Add more broth if needed to adjust consistency.
Stir in chopped basil. Use an immersion blender to puree the soup until smooth (or transfer in batches to a blender). For a chunkier texture, blend only half the soup.
Stir in heavy cream and warm through over low heat (do not boil).
Ladle into bowls and garnish with additional basil. Serve hot with grilled cheese or crusty bread.