mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-19 10:53:55 +00:00
StructurizeCFG: Fix inverting constantexpr conditions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275626 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1b5d21e1e4
commit
0d9b855807
@ -377,14 +377,8 @@ void StructurizeCFG::analyzeLoops(RegionNode *N) {
|
||||
/// \brief Invert the given condition
|
||||
Value *StructurizeCFG::invert(Value *Condition) {
|
||||
// First: Check if it's a constant
|
||||
if (Condition == BoolTrue)
|
||||
return BoolFalse;
|
||||
|
||||
if (Condition == BoolFalse)
|
||||
return BoolTrue;
|
||||
|
||||
if (Condition == BoolUndef)
|
||||
return BoolUndef;
|
||||
if (Constant *C = dyn_cast<Constant>(Condition))
|
||||
return ConstantExpr::getNot(C);
|
||||
|
||||
// Second: If the condition is already inverted, return the original value
|
||||
if (match(Condition, m_Not(m_Value(Condition))))
|
||||
|
30
test/Transforms/StructurizeCFG/invert-constantexpr.ll
Normal file
30
test/Transforms/StructurizeCFG/invert-constantexpr.ll
Normal file
@ -0,0 +1,30 @@
|
||||
; RUN: opt -S -o - -structurizecfg < %s | FileCheck %s
|
||||
|
||||
; CHECK-LABEL: @invert_constantexpr_condition(
|
||||
; CHECK: %tmp5 = or i1 %tmp4, icmp eq (i32 bitcast (float fadd (float undef, float undef) to i32), i32 0)
|
||||
; CHECK: [ icmp ne (i32 bitcast (float fadd (float undef, float undef) to i32), i32 0), %bb ]
|
||||
define void @invert_constantexpr_condition(i32 %arg, i32 %arg1) #0 {
|
||||
bb:
|
||||
%tmp = icmp eq i32 %arg, 0
|
||||
br i1 icmp eq (i32 bitcast (float fadd (float undef, float undef) to i32), i32 0), label %bb2, label %bb6
|
||||
|
||||
bb2:
|
||||
br i1 %tmp, label %bb3, label %bb6
|
||||
|
||||
bb3:
|
||||
%tmp4 = phi i1 [ %tmp7, %bb6 ], [ undef, %bb2 ]
|
||||
%tmp5 = or i1 %tmp4, icmp eq (i32 bitcast (float fadd (float undef, float undef) to i32), i32 0)
|
||||
br i1 %tmp5, label %bb8, label %bb8
|
||||
|
||||
bb6:
|
||||
%tmp7 = icmp slt i32 %arg, %arg1
|
||||
br label %bb3
|
||||
|
||||
bb8:
|
||||
ret void
|
||||
}
|
||||
|
||||
declare i32 @llvm.amdgcn.workitem.id.x() #1
|
||||
|
||||
attributes #0 = { nounwind }
|
||||
attributes #1 = { nounwind readnone }
|
Loading…
x
Reference in New Issue
Block a user