mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-02 07:32:52 +00:00
Fold select + select where both selects are on the same condition.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124469 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1ffb533699
commit
df3bfae151
@ -792,6 +792,19 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
|
||||
if (Instruction *NV = FoldOpIntoPhi(SI))
|
||||
return NV;
|
||||
|
||||
if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) {
|
||||
if (TrueSI->getCondition() == CondVal) {
|
||||
SI.setOperand(1, TrueSI->getTrueValue());
|
||||
return &SI;
|
||||
}
|
||||
}
|
||||
if (SelectInst *FalseSI = dyn_cast<SelectInst>(FalseVal)) {
|
||||
if (FalseSI->getCondition() == CondVal) {
|
||||
SI.setOperand(2, FalseSI->getFalseValue());
|
||||
return &SI;
|
||||
}
|
||||
}
|
||||
|
||||
if (BinaryOperator::isNot(CondVal)) {
|
||||
SI.setOperand(0, BinaryOperator::getNotArgument(CondVal));
|
||||
SI.setOperand(1, FalseVal);
|
||||
|
@ -692,7 +692,7 @@ define i64 @test50(i32 %a) nounwind {
|
||||
|
||||
; PR8994
|
||||
|
||||
; Theis select instruction can't be eliminated because trying to do so would
|
||||
; This select instruction can't be eliminated because trying to do so would
|
||||
; change the number of vector elements. This used to assert.
|
||||
define i48 @test51(<3 x i1> %icmp, <3 x i16> %tmp) {
|
||||
%select = select <3 x i1> %icmp, <3 x i16> zeroinitializer, <3 x i16> %tmp
|
||||
@ -700,3 +700,18 @@ define i48 @test51(<3 x i1> %icmp, <3 x i16> %tmp) {
|
||||
%tmp2 = bitcast <3 x i16> %select to i48
|
||||
ret i48 %tmp2
|
||||
}
|
||||
|
||||
; PR8575
|
||||
|
||||
@g = common global i32 0, align 4
|
||||
define void @test52(i32 %n, i32 %m) nounwind {
|
||||
entry:
|
||||
%cmp = icmp sgt i32 %n, %m
|
||||
%. = select i1 %cmp, i32 1, i32 3
|
||||
%add = add nsw i32 %., 3
|
||||
%storemerge = select i1 %cmp, i32 %., i32 %add
|
||||
; CHECK: select i1 %cmp, i32 1, i32 6
|
||||
store i32 %storemerge, i32* @g, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user