| ; Simple test of non-fused compare/branch. | |
| ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ | |
| ; RUN: -allow-externally-defined-symbols | FileCheck %s | |
| ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ | |
| ; RUN: -allow-externally-defined-symbols | FileCheck --check-prefix=OPTM1 %s | |
| define internal void @testBool(i32 %a, i32 %b) { | |
| entry: | |
| %cmp = icmp slt i32 %a, %b | |
| %cmp1 = icmp sgt i32 %a, %b | |
| br i1 %cmp, label %if.then, label %if.end | |
| if.then: ; preds = %entry | |
| %cmp_ext = zext i1 %cmp to i32 | |
| tail call void @use(i32 %cmp_ext) | |
| br label %if.end | |
| if.end: ; preds = %if.then, %entry | |
| br i1 %cmp1, label %if.then5, label %if.end7 | |
| if.then5: ; preds = %if.end | |
| %cmp1_ext = zext i1 %cmp1 to i32 | |
| tail call void @use(i32 %cmp1_ext) | |
| br label %if.end7 | |
| if.end7: ; preds = %if.then5, %if.end | |
| ret void | |
| } | |
| declare void @use(i32) | |
| ; CHECK-LABEL: testBool | |
| ; Two bool computations | |
| ; CHECK: cmp | |
| ; CHECK: cmp | |
| ; Test first bool | |
| ; CHECK: cmp | |
| ; CHECK: call | |
| ; Test second bool | |
| ; CHECK: cmp | |
| ; CHECK: call | |
| ; CHECK: ret | |
| ; | |
| ; OPTM1-LABEL: testBool | |
| ; Two bool computations | |
| ; OPTM1: cmp | |
| ; OPTM1: cmp | |
| ; Test first bool | |
| ; OPTM1: cmp | |
| ; OPTM1: call | |
| ; Test second bool | |
| ; OPTM1: cmp | |
| ; OPTM1: call | |
| ; OPTM1: ret |