aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Scalar/SCCP.cpp29
1 files changed, 6 insertions, 23 deletions
diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp
index 7a28281a79..4e5e5156bb 100644
--- a/lib/Transforms/Scalar/SCCP.cpp
+++ b/lib/Transforms/Scalar/SCCP.cpp
@@ -596,19 +596,11 @@ void SCCP::visitBinaryOperator(Instruction &I) {
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;
}
@@ -652,17 +644,8 @@ void SCCP::visitBinaryOperator(Instruction &I) {
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()));
}
}