mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-12 07:37:34 +00:00
Add sccp support for select instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12318 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3d69f46d64
commit
6e32372fcd
@ -212,6 +212,7 @@ private:
|
||||
void visitTerminatorInst(TerminatorInst &TI);
|
||||
|
||||
void visitCastInst(CastInst &I);
|
||||
void visitSelectInst(SelectInst &I);
|
||||
void visitBinaryOperator(Instruction &I);
|
||||
void visitShiftInst(ShiftInst &I) { visitBinaryOperator(I); }
|
||||
|
||||
@ -565,6 +566,28 @@ void SCCP::visitCastInst(CastInst &I) {
|
||||
markConstant(&I, ConstantExpr::getCast(VState.getConstant(), I.getType()));
|
||||
}
|
||||
|
||||
void SCCP::visitSelectInst(SelectInst &I) {
|
||||
InstVal &CondValue = getValueState(I.getCondition());
|
||||
if (CondValue.isOverdefined())
|
||||
markOverdefined(&I);
|
||||
else if (CondValue.isConstant()) {
|
||||
if (CondValue.getConstant() == ConstantBool::True) {
|
||||
InstVal &Val = getValueState(I.getTrueValue());
|
||||
if (Val.isOverdefined())
|
||||
markOverdefined(&I);
|
||||
else if (Val.isConstant())
|
||||
markConstant(&I, Val.getConstant());
|
||||
} else if (CondValue.getConstant() == ConstantBool::False) {
|
||||
InstVal &Val = getValueState(I.getFalseValue());
|
||||
if (Val.isOverdefined())
|
||||
markOverdefined(&I);
|
||||
else if (Val.isConstant())
|
||||
markConstant(&I, Val.getConstant());
|
||||
} else
|
||||
markOverdefined(&I);
|
||||
}
|
||||
}
|
||||
|
||||
// Handle BinaryOperators and Shift Instructions...
|
||||
void SCCP::visitBinaryOperator(Instruction &I) {
|
||||
InstVal &IV = ValueState[&I];
|
||||
|
Loading…
x
Reference in New Issue
Block a user