mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
implement extractelement.
llvm-svn: 47812
This commit is contained in:
parent
72e898e589
commit
18c26f3dad
@ -191,8 +191,10 @@ namespace {
|
||||
// Don't inline a load across a store or other bad things!
|
||||
return false;
|
||||
|
||||
// Must not be used in inline asm
|
||||
if (I.hasOneUse() && isInlineAsm(*I.use_back())) return false;
|
||||
// Must not be used in inline asm or extractelement.
|
||||
if (I.hasOneUse() &&
|
||||
(isInlineAsm(*I.use_back()) || isa<ExtractElementInst>(I)))
|
||||
return false;
|
||||
|
||||
// Only inline instruction it if it's use is in the same BB as the inst.
|
||||
return I.getParent() == cast<Instruction>(I.use_back())->getParent();
|
||||
@ -253,6 +255,7 @@ namespace {
|
||||
void visitVAArgInst (VAArgInst &I);
|
||||
|
||||
void visitInsertElementInst(InsertElementInst &I);
|
||||
void visitExtractElementInst(ExtractElementInst &I);
|
||||
|
||||
void visitInstruction(Instruction &I) {
|
||||
cerr << "C Writer does not know about " << I;
|
||||
@ -3037,6 +3040,18 @@ void CWriter::visitInsertElementInst(InsertElementInst &I) {
|
||||
Out << ")";
|
||||
}
|
||||
|
||||
void CWriter::visitExtractElementInst(ExtractElementInst &I) {
|
||||
// We know that our operand is not inlined.
|
||||
Out << "((";
|
||||
const Type *EltTy =
|
||||
cast<VectorType>(I.getOperand(0)->getType())->getElementType();
|
||||
printType(Out, PointerType::getUnqual(EltTy));
|
||||
Out << ")(&" << GetValueName(I.getOperand(0)) << "))[";
|
||||
writeOperand(I.getOperand(1));
|
||||
Out << "]";
|
||||
}
|
||||
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// External Interface declaration
|
||||
|
Loading…
Reference in New Issue
Block a user