[llvm-commits] [llvm] r52472 - /llvm/trunk/lib/Transforms/Scalar/GVN.cpp
Evan Cheng
evan.cheng at apple.com
Wed Jun 18 23:26:48 PDT 2008
Hi Owen,
This broke povray. Can you fix?
/Users/echeng/LLVM/llvm/Release/bin/opt -std-compile-opts -time-passes
-info-output-file=/Volumes/Vadar/LLVM/llvm/projects/llvm-test/External/
Povray/Output/povray.linked.bc.info Output/povray.linked.rbc -o Outp\
ut/povray.linked.bc -f
Assertion failed: (getType() == V->getType() && "All operands to PHI
node must be the same type as the PHI node!"), function addIncoming,
file /Users/echeng/LLVM/llvm/include/llvm/Instructions.h, line 1914.
0 opt 0x0039c1cc
_ZN4llvm3sys18RemoveFileOnSignalERKNS0_4PathEPSs + 844^@
1 libSystem.B.dylib 0x9232209b _sigtramp + 43^@
2 ??? 0xffffffff 0x0 + 4294967295^@
3 libSystem.B.dylib 0x9239aec2 raise + 26^@
4 libSystem.B.dylib 0x923aa47f abort + 73^@
5 libSystem.B.dylib 0x9239c063 __assert_rtn + 101^@
6 opt 0x00093de2
_ZN4llvm7PHINode11addIncomingEPNS_5ValueEPNS_10BasicBlockE + 386^@
7 opt 0x000683b5
_ZN4llvm8df_beginIPNS_15DomTreeNodeBaseINS_10BasicBlockEEEEENS_11df_iteratorIT_NS_11SmallPtrSetIPNS_11GraphTraitsIS6_E8NodeTypeELj8EEELb0ES9_EERKS6_
+ 6565^@
8 opt 0x00072310
_ZN4llvm13createGVNPassEv + 22624^@
9 opt 0x000727af
_ZN4llvm13createGVNPassEv + 23807^@
10 opt 0x00331ae6
_ZN4llvm13FPPassManager13runOnFunctionERNS_8FunctionE + 518^@
11 opt 0x0020e612
_ZN49_GLOBAL__N_CallGraphSCCPass
.cpp_00000000_62117D2D13CGPassManager11runOnModuleERN4llvm6ModuleE +
1250^@
12 opt 0x00332561
_ZN4llvm13MPPassManager11runOnModuleERNS_6ModuleE + 369^@
13 opt 0x00332974
_ZN4llvm15PassManagerImpl3runERNS_6ModuleE + 132^@
14 opt 0x003329eb
_ZN4llvm11PassManager3runERNS_6ModuleE + 27^@
15 opt 0x00008b87 main + 2583^@
16 opt 0x00002196 start + 54^@
Evan
On Jun 18, 2008, at 2:59 PM, Owen Anderson wrote:
> Author: resistor
> Date: Wed Jun 18 16:59:00 2008
> New Revision: 52472
>
> URL: http://llvm.org/viewvc/llvm-project?rev=52472&view=rev
> Log:
> Add support for extractvalue and insertvalue instructions in GVN.
>
> Modified:
> llvm/trunk/lib/Transforms/Scalar/GVN.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=52472&r1=52471&r2=52472&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Wed Jun 18 16:59:00 2008
> @@ -59,7 +59,7 @@
> SHUFFLE, SELECT, TRUNC, ZEXT, SEXT,
> FPTOUI,
> FPTOSI, UITOFP, SITOFP, FPTRUNC, FPEXT,
> PTRTOINT, INTTOPTR, BITCAST, GEP, CALL,
> CONSTANT,
> - EMPTY, TOMBSTONE };
> + EXTRACTVALUE, INSERTVALUE, EMPTY,
> TOMBSTONE };
>
> ExpressionOpcode opcode;
> const Type* type;
> @@ -150,6 +150,8 @@
> Expression create_expression(GetElementPtrInst* G);
> Expression create_expression(CallInst* C);
> Expression create_expression(Constant* C);
> + Expression create_expression(InsertValueInst* I);
> + Expression create_expression(ExtractValueInst* I);
> public:
> ValueTable() : nextValueNumber(1) { }
> uint32_t lookup_or_add(Value* V);
> @@ -284,6 +286,40 @@
> }
> }
>
> +Expression ValueTable::create_expression(InsertValueInst* I) {
> + Expression e;
> +
> + e.type = I->getType();
> + e.firstVN = lookup_or_add(I->getOperand(0));
> + e.secondVN = lookup_or_add(I->getOperand(1));
> + e.thirdVN = 0;
> + e.function = 0;
> + e.opcode = Expression::INSERTVALUE;
> +
> + for (InsertValueInst::op_iterator OI = I->op_begin()+2,
> + OE = I->op_end(); OI != OE; ++OI)
> + e.varargs.push_back(lookup_or_add(I));
> +
> + return e;
> +}
> +
> +Expression ValueTable::create_expression(ExtractValueInst* I) {
> + Expression e;
> +
> + e.type = I->getType();
> + e.firstVN = lookup_or_add(I->getOperand(0));
> + e.secondVN = lookup_or_add(I->getOperand(1));
> + e.thirdVN = 0;
> + e.function = 0;
> + e.opcode = Expression::EXTRACTVALUE;
> +
> + for (InsertValueInst::op_iterator OI = I->op_begin()+2,
> + OE = I->op_end(); OI != OE; ++OI)
> + e.varargs.push_back(lookup_or_add(I));
> +
> + return e;
> +}
> +
> Expression ValueTable::create_expression(CallInst* C) {
> Expression e;
>
> @@ -541,6 +577,32 @@
> valueNumbering.insert(std::make_pair(V, nextValueNumber));
> return nextValueNumber++;
> }
> + } else if (InsertValueInst* II = dyn_cast<InsertValueInst>(V)) {
> + Expression e = create_expression(II);
> +
> + DenseMap<Expression, uint32_t>::iterator EI =
> expressionNumbering.find(e);
> + if (EI != expressionNumbering.end()) {
> + valueNumbering.insert(std::make_pair(V, EI->second));
> + return EI->second;
> + } else {
> + expressionNumbering.insert(std::make_pair(e, nextValueNumber));
> + valueNumbering.insert(std::make_pair(V, nextValueNumber));
> +
> + return nextValueNumber++;
> + }
> + } else if (ExtractValueInst* E = dyn_cast<ExtractValueInst>(V)) {
> + Expression e = create_expression(E);
> +
> + DenseMap<Expression, uint32_t>::iterator EI =
> expressionNumbering.find(e);
> + if (EI != expressionNumbering.end()) {
> + valueNumbering.insert(std::make_pair(V, EI->second));
> + return EI->second;
> + } else {
> + expressionNumbering.insert(std::make_pair(e, nextValueNumber));
> + valueNumbering.insert(std::make_pair(V, nextValueNumber));
> +
> + return nextValueNumber++;
> + }
> } else if (BinaryOperator* BO = dyn_cast<BinaryOperator>(V)) {
> Expression e = create_expression(BO);
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list