[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