brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · eb252d1 Raw
120 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4declare void @use(i1)5 6define void @loop_pointer_iv(ptr %start, ptr %end, ptr %upper) {7; CHECK-LABEL: @loop_pointer_iv(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[END_LT_UPPER:%.*]] = icmp ult ptr [[END:%.*]], [[UPPER:%.*]]10; CHECK-NEXT:    br i1 [[END_LT_UPPER]], label [[LOOP_HEADER:%.*]], label [[EXIT:%.*]]11; CHECK:       loop.header:12; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[START:%.*]], [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]13; CHECK-NEXT:    [[C_2:%.*]] = icmp ule ptr [[IV]], [[END]]14; CHECK-NEXT:    call void @use(i1 [[C_2]])15; CHECK-NEXT:    [[T_2:%.*]] = icmp uge ptr [[IV]], [[START]]16; CHECK-NEXT:    call void @use(i1 [[T_2]])17; CHECK-NEXT:    [[C_1:%.*]] = icmp ule ptr [[IV]], [[END]]18; CHECK-NEXT:    br i1 [[C_1]], label [[LOOP_LATCH]], label [[EXIT]]19; CHECK:       loop.latch:20; CHECK-NEXT:    call void @use(i1 true)21; CHECK-NEXT:    [[IV_NEXT]] = getelementptr inbounds i8, ptr [[IV]], i8 122; CHECK-NEXT:    br label [[LOOP_HEADER]]23; CHECK:       exit:24; CHECK-NEXT:    ret void25;26entry:27  %end.lt.upper = icmp ult ptr %end, %upper28  br i1 %end.lt.upper, label %loop.header, label %exit29 30loop.header:31  %iv = phi ptr [ %start, %entry ], [ %iv.next, %loop.latch ]32  %c.2 = icmp ule ptr %iv, %end33  call void @use(i1 %c.2)34  %t.2 = icmp uge ptr %iv, %start35  call void @use(i1 %t.2)36  %c.1 = icmp ule ptr %iv, %end37  br i1 %c.1, label %loop.latch, label %exit38 39loop.latch:40  %t.1 = icmp ult ptr %iv, %upper41  call void @use(i1 %t.1)42  %iv.next = getelementptr inbounds i8, ptr %iv, i8 143  br label %loop.header44 45exit:46  ret void47}48 49define void @loop_pointer_iv_null_start(ptr %end, ptr %upper) {50; CHECK-LABEL: @loop_pointer_iv_null_start(51; CHECK-NEXT:  entry:52; CHECK-NEXT:    [[END_LT_UPPER:%.*]] = icmp ult ptr [[END:%.*]], [[UPPER:%.*]]53; CHECK-NEXT:    br i1 [[END_LT_UPPER]], label [[LOOP_HEADER:%.*]], label [[EXIT:%.*]]54; CHECK:       loop.header:55; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ null, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]56; CHECK-NEXT:    [[C_1:%.*]] = icmp ule ptr [[IV]], [[END]]57; CHECK-NEXT:    call void @use(i1 [[C_1]])58; CHECK-NEXT:    call void @use(i1 true)59; CHECK-NEXT:    [[C_3:%.*]] = icmp ule ptr [[IV]], [[END]]60; CHECK-NEXT:    br i1 [[C_3]], label [[LOOP_LATCH]], label [[EXIT]]61; CHECK:       loop.latch:62; CHECK-NEXT:    call void @use(i1 true)63; CHECK-NEXT:    [[IV_NEXT]] = getelementptr inbounds i8, ptr [[IV]], i8 164; CHECK-NEXT:    br label [[LOOP_HEADER]]65; CHECK:       exit:66; CHECK-NEXT:    ret void67;68entry:69  %end.lt.upper = icmp ult ptr %end, %upper70  br i1 %end.lt.upper, label %loop.header, label %exit71 72loop.header:73  %iv = phi ptr [ null, %entry ], [ %iv.next, %loop.latch ]74  %c.1 = icmp ule ptr %iv, %end75  call void @use(i1 %c.1)76  %c.2 = icmp uge ptr %iv, null77  call void @use(i1 %c.2)78  %c.3 = icmp ule ptr %iv, %end79  br i1 %c.3, label %loop.latch, label %exit80 81loop.latch:82  %c.4 = icmp ult ptr %iv, %upper83  call void @use(i1 %c.4)84  %iv.next = getelementptr inbounds i8, ptr %iv, i8 185  br label %loop.header86 87exit:88  ret void89}90 91define void @test_start_null_cmp_null(ptr %start) {92; CHECK-LABEL: @test_start_null_cmp_null(93; CHECK-NEXT:  entry:94; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]95; CHECK:       loop.header:96; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ null, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]97; CHECK-NEXT:    [[CMP_I_I122:%.*]] = icmp eq ptr [[IV]], null98; CHECK-NEXT:    br i1 [[CMP_I_I122]], label [[LOOP_LATCH]], label [[EXIT:%.*]]99; CHECK:       loop.latch:100; CHECK-NEXT:    [[IV_NEXT]] = getelementptr inbounds i8, ptr [[IV]], i64 1101; CHECK-NEXT:    br label [[LOOP_HEADER]]102; CHECK:       exit:103; CHECK-NEXT:    ret void104;105entry:106  br label %loop.header107 108loop.header:109  %iv = phi ptr [ null, %entry ], [ %iv.next, %loop.latch ]110  %cmp.i.i122 = icmp eq ptr %iv, null111  br i1 %cmp.i.i122, label %loop.latch, label %exit112 113loop.latch:114  %iv.next = getelementptr inbounds i8, ptr %iv, i64 1115  br label %loop.header116 117exit:118  ret void119}120