1db91a6b8SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*8ebb3eacSBjorn Pettersson; RUN: opt < %s -passes=sccp -S | FileCheck %s 3db91a6b8SFlorian Hahn 4db91a6b8SFlorian Hahndeclare void @use.i32(i32) 5db91a6b8SFlorian Hahndeclare void @use.i1(i1) 6db91a6b8SFlorian Hahn 7db91a6b8SFlorian Hahndefine void @and_constexpr(i32 %a) { 8db91a6b8SFlorian Hahn; CHECK-LABEL: @and_constexpr( 9db91a6b8SFlorian Hahn; CHECK-NEXT: entry: 10db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 0) 11db91a6b8SFlorian Hahn; CHECK-NEXT: [[AND_2:%.*]] = and i32 20, [[A:%.*]] 12db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 [[AND_2]]) 13db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 true) 14db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 false) 15db91a6b8SFlorian Hahn; CHECK-NEXT: [[COND_1:%.*]] = icmp eq i32 [[AND_2]], 10 16db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 [[COND_1]]) 17db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 4) 18db91a6b8SFlorian Hahn; CHECK-NEXT: ret void 19db91a6b8SFlorian Hahn; 20db91a6b8SFlorian Hahnentry: 21db91a6b8SFlorian Hahn %and.1 = and i32 ptrtoint (i32* inttoptr (i32 0 to i32*) to i32), %a 22db91a6b8SFlorian Hahn call void @use.i32(i32 %and.1) 23db91a6b8SFlorian Hahn %and.2 = and i32 ptrtoint (i32* inttoptr (i32 20 to i32*) to i32), %a 24db91a6b8SFlorian Hahn call void @use.i32(i32 %and.2) 25db91a6b8SFlorian Hahn %true.1 = icmp ne i32 %and.2, 100 26db91a6b8SFlorian Hahn call void @use.i1(i1 %true.1) 27db91a6b8SFlorian Hahn %false.1 = icmp eq i32 %and.2, 100 28db91a6b8SFlorian Hahn call void @use.i1(i1 %false.1) 29db91a6b8SFlorian Hahn %cond.1 = icmp eq i32 %and.2, 10 30db91a6b8SFlorian Hahn call void @use.i1(i1 %cond.1) 31db91a6b8SFlorian Hahn %and.3 = and i32 ptrtoint (i32* inttoptr (i32 20 to i32*) to i32), ptrtoint (i32* inttoptr (i32 100 to i32*) to i32) 32db91a6b8SFlorian Hahn call void @use.i32(i32 %and.3) 33db91a6b8SFlorian Hahn ret void 34db91a6b8SFlorian Hahn} 35db91a6b8SFlorian Hahn 36db91a6b8SFlorian Hahndefine void @add_constexpr(i32 %a) { 37db91a6b8SFlorian Hahn; CHECK-LABEL: @add_constexpr( 38db91a6b8SFlorian Hahn; CHECK-NEXT: entry: 39db91a6b8SFlorian Hahn; CHECK-NEXT: [[ADD_1:%.*]] = add i32 0, [[A:%.*]] 40db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 [[ADD_1]]) 41db91a6b8SFlorian Hahn; CHECK-NEXT: [[ADD_2:%.*]] = add i32 20, [[A]] 42db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 [[ADD_2]]) 43db91a6b8SFlorian Hahn; CHECK-NEXT: [[COND_1:%.*]] = icmp ne i32 [[ADD_2]], 100 44db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 [[COND_1]]) 45db91a6b8SFlorian Hahn; CHECK-NEXT: [[COND_2:%.*]] = icmp eq i32 [[ADD_2]], 100 46db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 [[COND_2]]) 47db91a6b8SFlorian Hahn; CHECK-NEXT: [[COND_3:%.*]] = icmp eq i32 [[ADD_2]], 10 48db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 [[COND_3]]) 49db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 120) 50db91a6b8SFlorian Hahn; CHECK-NEXT: ret void 51db91a6b8SFlorian Hahn; 52db91a6b8SFlorian Hahnentry: 53db91a6b8SFlorian Hahn %add.1 = add i32 ptrtoint (i32* inttoptr (i32 0 to i32*) to i32), %a 54db91a6b8SFlorian Hahn call void @use.i32(i32 %add.1) 55db91a6b8SFlorian Hahn %add.2 = add i32 ptrtoint (i32* inttoptr (i32 20 to i32*) to i32), %a 56db91a6b8SFlorian Hahn call void @use.i32(i32 %add.2) 57db91a6b8SFlorian Hahn %cond.1 = icmp ne i32 %add.2, 100 58db91a6b8SFlorian Hahn call void @use.i1(i1 %cond.1) 59db91a6b8SFlorian Hahn %cond.2 = icmp eq i32 %add.2, 100 60db91a6b8SFlorian Hahn call void @use.i1(i1 %cond.2) 61db91a6b8SFlorian Hahn %cond.3 = icmp eq i32 %add.2, 10 62db91a6b8SFlorian Hahn call void @use.i1(i1 %cond.3) 63db91a6b8SFlorian Hahn %add.3 = add i32 ptrtoint (i32* inttoptr (i32 20 to i32*) to i32), ptrtoint (i32* inttoptr (i32 100 to i32*) to i32) 64db91a6b8SFlorian Hahn call void @use.i32(i32 %add.3) 65db91a6b8SFlorian Hahn ret void 66db91a6b8SFlorian Hahn} 67db91a6b8SFlorian Hahn 68db91a6b8SFlorian Hahndefine void @mul_constexpr(i32 %a) { 69db91a6b8SFlorian Hahn; CHECK-LABEL: @mul_constexpr( 70db91a6b8SFlorian Hahn; CHECK-NEXT: entry: 71db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 0) 72db91a6b8SFlorian Hahn; CHECK-NEXT: [[MUL_2:%.*]] = mul i32 20, [[A:%.*]] 73db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 [[MUL_2]]) 74db91a6b8SFlorian Hahn; CHECK-NEXT: [[COND_1:%.*]] = icmp ne i32 [[MUL_2]], 100 75db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 [[COND_1]]) 76db91a6b8SFlorian Hahn; CHECK-NEXT: [[COND_2:%.*]] = icmp eq i32 [[MUL_2]], 100 77db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 [[COND_2]]) 78db91a6b8SFlorian Hahn; CHECK-NEXT: [[COND_3:%.*]] = icmp eq i32 [[MUL_2]], 10 79db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 [[COND_3]]) 80db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 2000) 81db91a6b8SFlorian Hahn; CHECK-NEXT: ret void 82db91a6b8SFlorian Hahn; 83db91a6b8SFlorian Hahnentry: 84db91a6b8SFlorian Hahn %mul.1 = mul i32 ptrtoint (i32* inttoptr (i32 0 to i32*) to i32), %a 85db91a6b8SFlorian Hahn call void @use.i32(i32 %mul.1) 86db91a6b8SFlorian Hahn %mul.2 = mul i32 ptrtoint (i32* inttoptr (i32 20 to i32*) to i32), %a 87db91a6b8SFlorian Hahn call void @use.i32(i32 %mul.2) 88db91a6b8SFlorian Hahn %cond.1 = icmp ne i32 %mul.2, 100 89db91a6b8SFlorian Hahn call void @use.i1(i1 %cond.1) 90db91a6b8SFlorian Hahn %cond.2 = icmp eq i32 %mul.2, 100 91db91a6b8SFlorian Hahn call void @use.i1(i1 %cond.2) 92db91a6b8SFlorian Hahn %cond.3 = icmp eq i32 %mul.2, 10 93db91a6b8SFlorian Hahn call void @use.i1(i1 %cond.3) 94db91a6b8SFlorian Hahn %mul.3 = mul i32 ptrtoint (i32* inttoptr (i32 20 to i32*) to i32), ptrtoint (i32* inttoptr (i32 100 to i32*) to i32) 95db91a6b8SFlorian Hahn call void @use.i32(i32 %mul.3) 96db91a6b8SFlorian Hahn ret void 97db91a6b8SFlorian Hahn} 98db91a6b8SFlorian Hahn 99db91a6b8SFlorian Hahndefine void @udiv_constexpr(i32 %a) { 100db91a6b8SFlorian Hahn; CHECK-LABEL: @udiv_constexpr( 101db91a6b8SFlorian Hahn; CHECK-NEXT: entry: 102db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 0) 103db91a6b8SFlorian Hahn; CHECK-NEXT: [[UDIV_2:%.*]] = udiv i32 20, [[A:%.*]] 104db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 [[UDIV_2]]) 105db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 true) 106db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 false) 107db91a6b8SFlorian Hahn; CHECK-NEXT: [[COND_1:%.*]] = icmp eq i32 [[UDIV_2]], 10 108db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i1(i1 [[COND_1]]) 109db91a6b8SFlorian Hahn; CHECK-NEXT: call void @use.i32(i32 0) 110db91a6b8SFlorian Hahn; CHECK-NEXT: ret void 111db91a6b8SFlorian Hahn; 112db91a6b8SFlorian Hahnentry: 113db91a6b8SFlorian Hahn %udiv.1 = udiv i32 ptrtoint (i32* inttoptr (i32 0 to i32*) to i32), %a 114db91a6b8SFlorian Hahn call void @use.i32(i32 %udiv.1) 115db91a6b8SFlorian Hahn %udiv.2 = udiv i32 ptrtoint (i32* inttoptr (i32 20 to i32*) to i32), %a 116db91a6b8SFlorian Hahn call void @use.i32(i32 %udiv.2) 117db91a6b8SFlorian Hahn %true.1 = icmp ne i32 %udiv.2, 100 118db91a6b8SFlorian Hahn call void @use.i1(i1 %true.1) 119db91a6b8SFlorian Hahn %false.1 = icmp eq i32 %udiv.2, 50 120db91a6b8SFlorian Hahn call void @use.i1(i1 %false.1) 121db91a6b8SFlorian Hahn %cond.1 = icmp eq i32 %udiv.2, 10 122db91a6b8SFlorian Hahn call void @use.i1(i1 %cond.1) 123db91a6b8SFlorian Hahn %udiv.3 = udiv i32 ptrtoint (i32* inttoptr (i32 20 to i32*) to i32), ptrtoint (i32* inttoptr (i32 100 to i32*) to i32) 124db91a6b8SFlorian Hahn call void @use.i32(i32 %udiv.3) 125db91a6b8SFlorian Hahn ret void 126db91a6b8SFlorian Hahn} 127