diff options
author | Chris Lattner <sabre@nondot.org> | 2007-08-26 22:47:40 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-08-26 22:47:40 +0000 |
commit | 6b5d0bf42fa4212f21ebb620b15e1024cb6a2a58 (patch) | |
tree | 664ab103b2ef74b78d0aa4d02b6596b5a4618f71 | |
parent | 8ae3a9f8bec69b5251abd695ffcd306a90b84d61 (diff) |
implement a fixme
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41466 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | CodeGen/CGExprComplex.cpp | 21 |
1 files 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); } |