diff options
author | Chris Lattner <sabre@nondot.org> | 2008-03-02 03:52:39 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-03-02 03:52:39 +0000 |
commit | f41a794f36dadb45681f946fac9b1feeb2c3ba73 (patch) | |
tree | 7bf297eedaad52161a21cda47a7677ca915d347f /lib/Target/CBackend/CBackend.cpp | |
parent | d809071bcb45ecf4939ea084fc80c64be70fe23f (diff) | |
download | external_llvm-f41a794f36dadb45681f946fac9b1feeb2c3ba73.zip external_llvm-f41a794f36dadb45681f946fac9b1feeb2c3ba73.tar.gz external_llvm-f41a794f36dadb45681f946fac9b1feeb2c3ba73.tar.bz2 |
implement insertelement.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47811 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/CBackend/CBackend.cpp')
-rw-r--r-- | lib/Target/CBackend/CBackend.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 4c36152..bdef34d 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -187,7 +187,7 @@ namespace { // emit it inline where it would go. if (I.getType() == Type::VoidTy || !I.hasOneUse() || isa<TerminatorInst>(I) || isa<CallInst>(I) || isa<PHINode>(I) || - isa<LoadInst>(I) || isa<VAArgInst>(I)) + isa<LoadInst>(I) || isa<VAArgInst>(I) || isa<InsertElementInst>(I)) // Don't inline a load across a store or other bad things! return false; @@ -251,6 +251,8 @@ namespace { void visitStoreInst (StoreInst &I); void visitGetElementPtrInst(GetElementPtrInst &I); void visitVAArgInst (VAArgInst &I); + + void visitInsertElementInst(InsertElementInst &I); void visitInstruction(Instruction &I) { cerr << "C Writer does not know about " << I; @@ -3022,6 +3024,20 @@ void CWriter::visitVAArgInst(VAArgInst &I) { Out << ");\n "; } +void CWriter::visitInsertElementInst(InsertElementInst &I) { + const Type *EltTy = I.getType()->getElementType(); + writeOperand(I.getOperand(0)); + Out << ";\n "; + Out << "(("; + printType(Out, PointerType::getUnqual(EltTy)); + Out << ")(&" << GetValueName(&I) << "))["; + writeOperand(I.getOperand(1)); + Out << "] = ("; + writeOperand(I.getOperand(2)); + Out << ")"; +} + + //===----------------------------------------------------------------------===// // External Interface declaration //===----------------------------------------------------------------------===// |