forked from OSchip/llvm-project
parent
7aa0ad65ce
commit
10a2c38d83
|
@ -984,9 +984,9 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
|
|||
if (Instruction *Result = visitSelectInstWithICmp(SI, ICI))
|
||||
return Result;
|
||||
|
||||
if (Instruction *TI = dyn_cast<Instruction>(TrueVal))
|
||||
if (Instruction *FI = dyn_cast<Instruction>(FalseVal))
|
||||
if (TI->hasOneUse() && FI->hasOneUse()) {
|
||||
auto *TI = dyn_cast<Instruction>(TrueVal);
|
||||
auto *FI = dyn_cast<Instruction>(FalseVal);
|
||||
if (TI && FI && TI->hasOneUse() && FI->hasOneUse()) {
|
||||
Instruction *AddOp = nullptr, *SubOp = nullptr;
|
||||
|
||||
// Turn (select C, (op X, Y), (op X, Z)) -> (op X, (select C, Y, Z))
|
||||
|
@ -1000,12 +1000,14 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
|
|||
FI->getOpcode() == Instruction::Add) ||
|
||||
(TI->getOpcode() == Instruction::FSub &&
|
||||
FI->getOpcode() == Instruction::FAdd)) {
|
||||
AddOp = FI; SubOp = TI;
|
||||
AddOp = FI;
|
||||
SubOp = TI;
|
||||
} else if ((FI->getOpcode() == Instruction::Sub &&
|
||||
TI->getOpcode() == Instruction::Add) ||
|
||||
(FI->getOpcode() == Instruction::FSub &&
|
||||
TI->getOpcode() == Instruction::FAdd)) {
|
||||
AddOp = TI; SubOp = FI;
|
||||
AddOp = TI;
|
||||
SubOp = FI;
|
||||
}
|
||||
|
||||
if (AddOp) {
|
||||
|
@ -1035,9 +1037,8 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
|
|||
Value *NewFalseOp = NegVal;
|
||||
if (AddOp != TI)
|
||||
std::swap(NewTrueOp, NewFalseOp);
|
||||
Value *NewSel =
|
||||
Builder->CreateSelect(CondVal, NewTrueOp,
|
||||
NewFalseOp, SI.getName() + ".p");
|
||||
Value *NewSel = Builder->CreateSelect(CondVal, NewTrueOp, NewFalseOp,
|
||||
SI.getName() + ".p");
|
||||
|
||||
if (SI.getType()->isFPOrFPVectorTy()) {
|
||||
Instruction *RI =
|
||||
|
|
Loading…
Reference in New Issue