brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 9beee93 Raw
122 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=ipsccp -S | FileCheck %s3 4declare void @use(i1)5declare void @llvm.assume(i1)6 7define void @basic(i32 %v) {8; CHECK-LABEL: @basic(9; CHECK-NEXT:    [[A1:%.*]] = icmp ult i32 [[V:%.*]], 1010; CHECK-NEXT:    call void @llvm.assume(i1 [[A1]])11; CHECK-NEXT:    [[A2:%.*]] = icmp ugt i32 [[V]], 512; CHECK-NEXT:    call void @llvm.assume(i1 [[A2]])13; CHECK-NEXT:    call void @use(i1 true)14; CHECK-NEXT:    [[C2:%.*]] = icmp ult i32 [[V]], 915; CHECK-NEXT:    call void @use(i1 [[C2]])16; CHECK-NEXT:    call void @use(i1 false)17; CHECK-NEXT:    [[C4:%.*]] = icmp ugt i32 [[V]], 818; CHECK-NEXT:    call void @use(i1 [[C4]])19; CHECK-NEXT:    call void @use(i1 true)20; CHECK-NEXT:    [[C6:%.*]] = icmp ugt i32 [[V]], 621; CHECK-NEXT:    call void @use(i1 [[C6]])22; CHECK-NEXT:    call void @use(i1 false)23; CHECK-NEXT:    [[C8:%.*]] = icmp ult i32 [[V]], 724; CHECK-NEXT:    call void @use(i1 [[C8]])25; CHECK-NEXT:    ret void26;27  %a1 = icmp ult i32 %v, 1028  call void @llvm.assume(i1 %a1)29  %a2 = icmp ugt i32 %v, 530  call void @llvm.assume(i1 %a2)31  %c1 = icmp ult i32 %v, 1032  call void @use(i1 %c1)33  %c2 = icmp ult i32 %v, 934  call void @use(i1 %c2)35  %c3 = icmp ugt i32 %v, 936  call void @use(i1 %c3)37  %c4 = icmp ugt i32 %v, 838  call void @use(i1 %c4)39  %c5 = icmp ugt i32 %v, 540  call void @use(i1 %c5)41  %c6 = icmp ugt i32 %v, 642  call void @use(i1 %c6)43  %c7 = icmp ult i32 %v, 644  call void @use(i1 %c7)45  %c8 = icmp ult i32 %v, 746  call void @use(i1 %c8)47  ret void48}49 50define void @nonnull(ptr %v) {51; CHECK-LABEL: @nonnull(52; CHECK-NEXT:    [[A:%.*]] = icmp ne ptr [[V:%.*]], null53; CHECK-NEXT:    call void @llvm.assume(i1 [[A]])54; CHECK-NEXT:    call void @use(i1 false)55; CHECK-NEXT:    call void @use(i1 true)56; CHECK-NEXT:    call void @use(i1 false)57; CHECK-NEXT:    call void @use(i1 true)58; CHECK-NEXT:    ret void59;60  %a = icmp ne ptr %v, null61  call void @llvm.assume(i1 %a)62  %c1 = icmp eq ptr %v, null63  call void @use(i1 %c1)64  %c2 = icmp ne ptr %v, null65  call void @use(i1 %c2)66  %c3 = icmp eq ptr null, %v67  call void @use(i1 %c3)68  %c4 = icmp ne ptr null, %v69  call void @use(i1 %c4)70  ret void71}72 73define void @trunc_nuw(i8 %v) {74; CHECK-LABEL: @trunc_nuw(75; CHECK-NEXT:    [[A:%.*]] = trunc nuw i8 [[V:%.*]] to i176; CHECK-NEXT:    call void @llvm.assume(i1 [[A]])77; CHECK-NEXT:    call void @use(i1 false)78; CHECK-NEXT:    call void @use(i1 true)79; CHECK-NEXT:    call void @use(i1 false)80; CHECK-NEXT:    call void @use(i1 true)81; CHECK-NEXT:    ret void82;83  %a = trunc nuw i8 %v to i184  call void @llvm.assume(i1 %a)85  %c1 = icmp eq i8 %v, 086  call void @use(i1 %c1)87  %c2 = icmp ne i8 %v, 088  call void @use(i1 %c2)89  %c3 = icmp eq i8 0, %v90  call void @use(i1 %c3)91  %c4 = icmp ne i8 0, %v92  call void @use(i1 %c4)93  ret void94}95 96define void @neg_trunc(i8 %v) {97; CHECK-LABEL: @neg_trunc(98; CHECK-NEXT:    [[A:%.*]] = trunc i8 [[V:%.*]] to i199; CHECK-NEXT:    call void @llvm.assume(i1 [[A]])100; CHECK-NEXT:    [[C1:%.*]] = icmp eq i8 [[V]], 0101; CHECK-NEXT:    call void @use(i1 [[C1]])102; CHECK-NEXT:    [[C2:%.*]] = icmp ne i8 [[V]], 0103; CHECK-NEXT:    call void @use(i1 [[C2]])104; CHECK-NEXT:    [[C3:%.*]] = icmp eq i8 0, [[V]]105; CHECK-NEXT:    call void @use(i1 [[C3]])106; CHECK-NEXT:    [[C4:%.*]] = icmp ne i8 0, [[V]]107; CHECK-NEXT:    call void @use(i1 [[C4]])108; CHECK-NEXT:    ret void109;110  %a = trunc i8 %v to i1111  call void @llvm.assume(i1 %a)112  %c1 = icmp eq i8 %v, 0113  call void @use(i1 %c1)114  %c2 = icmp ne i8 %v, 0115  call void @use(i1 %c2)116  %c3 = icmp eq i8 0, %v117  call void @use(i1 %c3)118  %c4 = icmp ne i8 0, %v119  call void @use(i1 %c4)120  ret void121}122