ThrowException("Shift count for shift constant must be unsigned byte!");
if (!$3->getType()->isInteger())
ThrowException("Shift constant expression requires integer operand!");
- $$ = ConstantExpr::getShift($1, $3, $5);
+ $$ = ConstantExpr::get($1, $3, $5);
};
} else if (Opcode == Instruction::GetElementPtr) { // GetElementPtr
std::vector<Constant*> IdxList(ArgVec.begin()+1, ArgVec.end());
return ConstantExpr::getGetElementPtr(ArgVec[0], IdxList);
- } else if (Opcode == Instruction::Shl || Opcode == Instruction::Shr) {
- return ConstantExpr::getShift(Opcode, ArgVec[0], ArgVec[1]);
} else { // All other 2-operand expressions
return ConstantExpr::get(Opcode, ArgVec[0], ArgVec[1]);
}
Result.markOverdefined();
break; // Cannot fold this operation over the PHI nodes!
} else if (In1.isConstant() && In2.isConstant()) {
- Constant *Val = 0;
- if (isa<BinaryOperator>(I))
- Val = ConstantExpr::get(I.getOpcode(), In1.getConstant(),
- In2.getConstant());
- else {
- assert(isa<ShiftInst>(I) &&
- "Can only handle binops and shifts here!");
- Val = ConstantExpr::getShift(I.getOpcode(), In1.getConstant(),
- In2.getConstant());
- }
+ Constant *V = ConstantExpr::get(I.getOpcode(), In1.getConstant(),
+ In2.getConstant());
if (Result.isUndefined())
- Result.markConstant(Val);
- else if (Result.isConstant() && Result.getConstant() != Val) {
+ Result.markConstant(V);
+ else if (Result.isConstant() && Result.getConstant() != V) {
Result.markOverdefined();
break;
}
markOverdefined(IV, &I);
} else if (V1State.isConstant() && V2State.isConstant()) {
- Constant *Result = 0;
- if (isa<BinaryOperator>(I))
- Result = ConstantExpr::get(I.getOpcode(), V1State.getConstant(),
- V2State.getConstant());
- else {
- assert (isa<ShiftInst>(I) && "Can only handle binops and shifts here!");
- Result = ConstantExpr::getShift(I.getOpcode(), V1State.getConstant(),
- V2State.getConstant());
- }
-
- markConstant(IV, &I, Result); // This instruction constant folds!
+ markConstant(IV, &I, ConstantExpr::get(I.getOpcode(), V1State.getConstant(),
+ V2State.getConstant()));
}
}