| ; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s |
| |
| ; Check that debug locations are preserved. For more info see: |
| ; https://llvm.org/docs/SourceLevelDebugging.html#fixing-errors |
| ; RUN: opt < %s -enable-debugify -passes=correlated-propagation -S 2>&1 | \ |
| ; RUN: FileCheck %s -check-prefix=DEBUG |
| ; DEBUG: CheckModuleDebugify: PASS |
| |
| ; CHECK-LABEL: @test_nop |
| define void @test_nop(i32 %n) { |
| ; CHECK: udiv i32 %n, 100 |
| %div = udiv i32 %n, 100 |
| ret void |
| } |
| |
| ; CHECK-LABEL: @test1( |
| define void @test1(i32 %n) { |
| entry: |
| %cmp = icmp ule i32 %n, 65535 |
| br i1 %cmp, label %bb, label %exit |
| |
| bb: |
| ; CHECK: udiv i16 |
| %div = udiv i32 %n, 100 |
| br label %exit |
| |
| exit: |
| ret void |
| } |
| |
| ; CHECK-LABEL: @test2( |
| define void @test2(i32 %n) { |
| entry: |
| %cmp = icmp ule i32 %n, 65536 |
| br i1 %cmp, label %bb, label %exit |
| |
| bb: |
| ; CHECK: udiv i32 %n, 100 |
| %div = udiv i32 %n, 100 |
| br label %exit |
| |
| exit: |
| ret void |
| } |
| |
| ; CHECK-LABEL: @test3( |
| define void @test3(i32 %m, i32 %n) { |
| entry: |
| %cmp1 = icmp ult i32 %m, 65535 |
| %cmp2 = icmp ult i32 %n, 65535 |
| %cmp = and i1 %cmp1, %cmp2 |
| br i1 %cmp, label %bb, label %exit |
| |
| bb: |
| ; CHECK: udiv i16 |
| %div = udiv i32 %m, %n |
| br label %exit |
| |
| exit: |
| ret void |
| } |
| |
| ; CHECK-LABEL: @test4( |
| define void @test4(i32 %m, i32 %n) { |
| entry: |
| %cmp1 = icmp ult i32 %m, 65535 |
| %cmp2 = icmp ule i32 %n, 65536 |
| %cmp = and i1 %cmp1, %cmp2 |
| br i1 %cmp, label %bb, label %exit |
| |
| bb: |
| ; CHECK: udiv i32 %m, %n |
| %div = udiv i32 %m, %n |
| br label %exit |
| |
| exit: |
| ret void |
| } |
| |
| ; CHECK-LABEL: @test5 |
| define void @test5(i32 %n) { |
| %trunc = and i32 %n, 65535 |
| ; CHECK: udiv i16 |
| %div = udiv i32 %trunc, 42 |
| ret void |
| } |
| |
| ; CHECK-LABEL: @test6 |
| define void @test6(i32 %n) { |
| entry: |
| %cmp = icmp ule i32 %n, 255 |
| br i1 %cmp, label %bb, label %exit |
| |
| bb: |
| ; CHECK: udiv i8 |
| %div = sdiv i32 %n, 100 |
| br label %exit |
| |
| exit: |
| ret void |
| } |