; RUN: opt < %s -correlated-propagation -S | FileCheck %s ; 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: urem i16 %div = urem 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: urem i32 %n, 100 %div = urem 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: urem i16 %div = urem 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: urem i32 %m, %n %div = urem i32 %m, %n br label %exit exit: ret void } ; CHECK-LABEL: @test5 define void @test5(i32 %n) { %trunc = and i32 %n, 63 ; CHECK: urem i8 %div = urem 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: urem i8 %div = srem i32 %n, 100 br label %exit exit: ret void } ; CHECK-LABEL: @non_power_of_2 define void @non_power_of_2(i24 %n) { %div = urem i24 %n, 42 ret void }