brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 49a17fd Raw
124 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=correlated-propagation < %s | FileCheck %s3 4declare i32 @llvm.umin.i32(i32, i32)5declare i32 @llvm.umax.i32(i32, i32)6declare i32 @llvm.smin.i32(i32, i32)7declare i32 @llvm.smax.i32(i32, i32)8declare i32 @llvm.abs.i32(i32, i1)9declare void @use(i1)10 11define void @test_umin(i32 %x) {12; CHECK-LABEL: @test_umin(13; CHECK-NEXT:    [[M:%.*]] = call i32 @llvm.umin.i32(i32 [[X:%.*]], i32 10)14; CHECK-NEXT:    call void @use(i1 true)15; CHECK-NEXT:    [[C2:%.*]] = icmp samesign ult i32 [[M]], 1016; CHECK-NEXT:    call void @use(i1 [[C2]])17; CHECK-NEXT:    ret void18;19  %m = call i32 @llvm.umin.i32(i32 %x, i32 10)20  %c1 = icmp ule i32 %m, 1021  call void @use(i1 %c1)22  %c2 = icmp ult i32 %m, 1023  call void @use(i1 %c2)24  ret void25}26 27define void @test_umax(i32 %x) {28; CHECK-LABEL: @test_umax(29; CHECK-NEXT:    [[M:%.*]] = call i32 @llvm.umax.i32(i32 [[X:%.*]], i32 10)30; CHECK-NEXT:    call void @use(i1 true)31; CHECK-NEXT:    [[C2:%.*]] = icmp ugt i32 [[M]], 1032; CHECK-NEXT:    call void @use(i1 [[C2]])33; CHECK-NEXT:    ret void34;35  %m = call i32 @llvm.umax.i32(i32 %x, i32 10)36  %c1 = icmp uge i32 %m, 1037  call void @use(i1 %c1)38  %c2 = icmp ugt i32 %m, 1039  call void @use(i1 %c2)40  ret void41}42 43define void @test_smin(i32 %x) {44; CHECK-LABEL: @test_smin(45; CHECK-NEXT:    [[M:%.*]] = call i32 @llvm.smin.i32(i32 [[X:%.*]], i32 10)46; CHECK-NEXT:    call void @use(i1 true)47; CHECK-NEXT:    [[C2:%.*]] = icmp slt i32 [[M]], 1048; CHECK-NEXT:    call void @use(i1 [[C2]])49; CHECK-NEXT:    ret void50;51  %m = call i32 @llvm.smin.i32(i32 %x, i32 10)52  %c1 = icmp sle i32 %m, 1053  call void @use(i1 %c1)54  %c2 = icmp slt i32 %m, 1055  call void @use(i1 %c2)56  ret void57}58 59define void @test_smax(i32 %x) {60; CHECK-LABEL: @test_smax(61; CHECK-NEXT:    [[M:%.*]] = call i32 @llvm.smax.i32(i32 [[X:%.*]], i32 10)62; CHECK-NEXT:    call void @use(i1 true)63; CHECK-NEXT:    [[C2:%.*]] = icmp samesign ugt i32 [[M]], 1064; CHECK-NEXT:    call void @use(i1 [[C2]])65; CHECK-NEXT:    ret void66;67  %m = call i32 @llvm.smax.i32(i32 %x, i32 10)68  %c1 = icmp sge i32 %m, 1069  call void @use(i1 %c1)70  %c2 = icmp sgt i32 %m, 1071  call void @use(i1 %c2)72  ret void73}74 75define void @test_abs1(ptr %p) {76; CHECK-LABEL: @test_abs1(77; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[P:%.*]], align 4, !range [[RNG0:![0-9]+]]78; CHECK-NEXT:    [[A:%.*]] = call i32 @llvm.abs.i32(i32 [[X]], i1 true)79; CHECK-NEXT:    call void @use(i1 true)80; CHECK-NEXT:    [[C2:%.*]] = icmp samesign ult i32 [[A]], 1581; CHECK-NEXT:    call void @use(i1 [[C2]])82; CHECK-NEXT:    ret void83;84  %x = load i32, ptr %p, !range !{i32 -15, i32 10}85  %a = call i32 @llvm.abs.i32(i32 %x, i1 false)86  %c1 = icmp ule i32 %a, 1587  call void @use(i1 %c1)88  %c2 = icmp ult i32 %a, 1589  call void @use(i1 %c2)90  ret void91}92 93define void @test_abs2(i32 %x) {94; CHECK-LABEL: @test_abs2(95; CHECK-NEXT:    [[A:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)96; CHECK-NEXT:    call void @use(i1 true)97; CHECK-NEXT:    [[C2:%.*]] = icmp ult i32 [[A]], -214748364898; CHECK-NEXT:    call void @use(i1 [[C2]])99; CHECK-NEXT:    ret void100;101  %a = call i32 @llvm.abs.i32(i32 %x, i1 false)102  %c1 = icmp ule i32 %a, 2147483648103  call void @use(i1 %c1)104  %c2 = icmp ult i32 %a, 2147483648105  call void @use(i1 %c2)106  ret void107}108 109define void @test_abs3(i32 %x) {110; CHECK-LABEL: @test_abs3(111; CHECK-NEXT:    [[A:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)112; CHECK-NEXT:    call void @use(i1 true)113; CHECK-NEXT:    [[C2:%.*]] = icmp samesign ugt i32 [[A]], 0114; CHECK-NEXT:    call void @use(i1 [[C2]])115; CHECK-NEXT:    ret void116;117  %a = call i32 @llvm.abs.i32(i32 %x, i1 true)118  %c1 = icmp sge i32 %a, 0119  call void @use(i1 %c1)120  %c2 = icmp sgt i32 %a, 0121  call void @use(i1 %c2)122  ret void123}124