From 6b5d0bf42fa4212f21ebb620b15e1024cb6a2a58 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 26 Aug 2007 22:47:40 +0000 Subject: [PATCH] implement a fixme git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41466 91177308-0d34-0410-b5e6-96231b3b80d8 --- CodeGen/CGExprComplex.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/CodeGen/CGExprComplex.cpp b/CodeGen/CGExprComplex.cpp index 5aa6b97493..6e7996a051 100644 --- a/CodeGen/CGExprComplex.cpp +++ b/CodeGen/CGExprComplex.cpp @@ -16,6 +16,7 @@ #include "clang/AST/AST.h" #include "llvm/Constants.h" #include "llvm/Function.h" +#include "llvm/ADT/SmallString.h" #include "llvm/Support/Compiler.h" using namespace clang; using namespace CodeGen; @@ -184,13 +185,21 @@ ComplexPairTy ComplexExprEmitter::EmitLoadOfComplex(llvm::Value *SrcPtr, bool isVolatile) { llvm::Constant *Zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0); llvm::Constant *One = llvm::ConstantInt::get(llvm::Type::Int32Ty, 1); - // FIXME: It would be nice to make this "Ptr->getName()+realp" - llvm::Value *RealPtr = Builder.CreateGEP(SrcPtr, Zero, Zero, "realp"); - llvm::Value *ImagPtr = Builder.CreateGEP(SrcPtr, Zero, One, "imagp"); - // FIXME: It would be nice to make this "Ptr->getName()+real" - llvm::Value *Real = Builder.CreateLoad(RealPtr, isVolatile, "real"); - llvm::Value *Imag = Builder.CreateLoad(ImagPtr, isVolatile, "imag"); + llvm::SmallString<64> Name(SrcPtr->getNameStart(), + SrcPtr->getNameStart()+SrcPtr->getNameLen()); + + Name += ".realp"; + llvm::Value *RealPtr = Builder.CreateGEP(SrcPtr, Zero, Zero, Name.c_str()); + + Name.pop_back(); // .realp -> .real + llvm::Value *Real = Builder.CreateLoad(RealPtr, isVolatile, Name.c_str()); + + Name.resize(Name.size()-4); // .real -> .imagp + Name += "imagp"; + llvm::Value *ImagPtr = Builder.CreateGEP(SrcPtr, Zero, One, Name.c_str()); + Name.pop_back(); // .imagp -> .imag + llvm::Value *Imag = Builder.CreateLoad(ImagPtr, isVolatile, Name.c_str()); return ComplexPairTy(Real, Imag); } -- 2.50.1