127 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s3 4define i32 @test(i32 %a) {5; CHECK-LABEL: @test(6; CHECK-NEXT: entry:7; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 1288; CHECK-NEXT: br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]9; CHECK: continue:10; CHECK-NEXT: ret i32 [[A]]11; CHECK: exit:12; CHECK-NEXT: ret i32 -113;14entry:15 %cmp = icmp ult i32 %a, 12816 br i1 %cmp, label %continue, label %exit17continue:18 %and = and i32 %a, 25519 ret i32 %and20exit:21 ret i32 -122}23 24define i32 @test2(i32 %a) {25; CHECK-LABEL: @test2(26; CHECK-NEXT: entry:27; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 25628; CHECK-NEXT: br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]29; CHECK: continue:30; CHECK-NEXT: ret i32 [[A]]31; CHECK: exit:32; CHECK-NEXT: ret i32 -133;34entry:35 %cmp = icmp ult i32 %a, 25636 br i1 %cmp, label %continue, label %exit37continue:38 %and = and i32 %a, 25539 ret i32 %and40exit:41 ret i32 -142}43 44define i32 @test3(i32 %a) {45; CHECK-LABEL: @test3(46; CHECK-NEXT: entry:47; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 25648; CHECK-NEXT: br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]49; CHECK: continue:50; CHECK-NEXT: ret i32 [[A]]51; CHECK: exit:52; CHECK-NEXT: ret i32 -153;54entry:55 %cmp = icmp ult i32 %a, 25656 br i1 %cmp, label %continue, label %exit57continue:58 %and = and i32 %a, 102359 ret i32 %and60exit:61 ret i32 -162}63 64 65define i32 @neg1(i32 %a) {66; CHECK-LABEL: @neg1(67; CHECK-NEXT: entry:68; CHECK-NEXT: [[CMP:%.*]] = icmp ule i32 [[A:%.*]], 25669; CHECK-NEXT: br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]70; CHECK: continue:71; CHECK-NEXT: [[AND:%.*]] = and i32 [[A]], 25572; CHECK-NEXT: ret i32 [[AND]]73; CHECK: exit:74; CHECK-NEXT: ret i32 -175;76entry:77 %cmp = icmp ule i32 %a, 25678 br i1 %cmp, label %continue, label %exit79continue:80 %and = and i32 %a, 25581 ret i32 %and82exit:83 ret i32 -184}85 86define i32 @neg2(i32 %a) {87; CHECK-LABEL: @neg2(88; CHECK-NEXT: entry:89; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 51390; CHECK-NEXT: br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]91; CHECK: continue:92; CHECK-NEXT: [[AND:%.*]] = and i32 [[A]], 25593; CHECK-NEXT: ret i32 [[AND]]94; CHECK: exit:95; CHECK-NEXT: ret i32 -196;97entry:98 %cmp = icmp ult i32 %a, 51399 br i1 %cmp, label %continue, label %exit100continue:101 %and = and i32 %a, 255102 ret i32 %and103exit:104 ret i32 -1105}106 107define i32 @neg3(i32 %a) {108; CHECK-LABEL: @neg3(109; CHECK-NEXT: entry:110; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 256111; CHECK-NEXT: br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]112; CHECK: continue:113; CHECK-NEXT: [[AND:%.*]] = and i32 [[A]], 254114; CHECK-NEXT: ret i32 [[AND]]115; CHECK: exit:116; CHECK-NEXT: ret i32 -1117;118entry:119 %cmp = icmp ult i32 %a, 256120 br i1 %cmp, label %continue, label %exit121continue:122 %and = and i32 %a, 254123 ret i32 %and124exit:125 ret i32 -1126}127