The most common case for a branch condition is a single use compare. Directly invert the branch predicate rather than adding a lot of xor i1 true which the DAG will have to fold later. This produces nicer to read structurizer output. This produces some random changes in codegen due to the DAG swapping branch conditions itself, and then does a poor job of dealing with those inverts. llvm-svn: 300732
45 lines
1.3 KiB
LLVM
45 lines
1.3 KiB
LLVM
; RUN: opt -S -structurizecfg %s -o - | FileCheck %s
|
|
|
|
; CHECK-NOT: br i1 true
|
|
|
|
define void @blam(i32 addrspace(1)* nocapture %arg, float %arg1, float %arg2) {
|
|
; CHECK: bb:
|
|
bb:
|
|
br label %bb3
|
|
|
|
; CHECK: bb3:
|
|
bb3: ; preds = %bb7, %bb
|
|
%tmp = phi i64 [ 0, %bb ], [ %tmp8, %bb7 ]
|
|
%tmp4 = fcmp ult float %arg1, 3.500000e+00
|
|
; CHECK: %tmp4 = fcmp oge float %arg1, 3.500000e+00
|
|
; CHECK: br i1 %tmp4, label %bb5, label %Flow
|
|
br i1 %tmp4, label %bb7, label %bb5
|
|
|
|
; CHECK: bb5:
|
|
bb5: ; preds = %bb3
|
|
%tmp6 = fcmp olt float 0.000000e+00, %arg2
|
|
; CHECK: br label %Flow
|
|
br i1 %tmp6, label %bb10, label %bb7
|
|
|
|
; CHECK: Flow:
|
|
; CHECK: %1 = phi i1 [ %tmp6, %bb5 ], [ %tmp4, %bb3 ]
|
|
; CHECK-NEXT: br i1 %1, label %bb7, label %Flow1
|
|
|
|
; CHECK: bb7
|
|
bb7: ; preds = %bb5, %bb3
|
|
%tmp8 = add nuw nsw i64 %tmp, 1
|
|
%tmp9 = icmp slt i64 %tmp8, 5
|
|
; CHECK: br label %Flow1
|
|
br i1 %tmp9, label %bb3, label %bb10
|
|
|
|
; CHECK: Flow1:
|
|
; CHECK: %4 = phi i1 [ %tmp9, %bb7 ], [ true, %Flow ]
|
|
; CHECK-NEXT: br i1 %4, label %bb10, label %bb3
|
|
|
|
; CHECK: bb10:
|
|
bb10: ; preds = %bb7, %bb5
|
|
%tmp11 = phi i32 [ 15, %bb5 ], [ 255, %bb7 ]
|
|
store i32 %tmp11, i32 addrspace(1)* %arg, align 4
|
|
ret void
|
|
}
|