brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · fcd2b6b Raw
108 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=newgvn -S | FileCheck %s3 4@g_20 = external global i32, align 45 6define void @test() {7; CHECK-LABEL: @test(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    br label [[BB1:%.*]]10; CHECK:       bb1:11; CHECK-NEXT:    [[STOREMERGE:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[ADD1:%.*]], [[CRITEDGE:%.*]] ]12; CHECK-NEXT:    store i32 [[STOREMERGE]], ptr @g_20, align 413; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i32 [[STOREMERGE]], 014; CHECK-NEXT:    br i1 [[CMP0]], label [[LR_PH:%.*]], label [[CRITEDGE]]15; CHECK:       lr.ph:16; CHECK-NEXT:    [[LV:%.*]] = load i64, ptr inttoptr (i64 16 to ptr), align 1617; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i64 [[LV]], 018; CHECK-NEXT:    br i1 [[CMP1]], label [[PREHEADER_SPLIT:%.*]], label [[CRITEDGE]]19; CHECK:       preheader.split:20; CHECK-NEXT:    br label [[PREHEADER_SPLIT]]21; CHECK:       critedge:22; CHECK-NEXT:    [[PHIOFOPS1:%.*]] = phi i1 [ false, [[BB1]] ], [ true, [[LR_PH]] ]23; CHECK-NEXT:    [[PHIOFOPS:%.*]] = phi i1 [ [[CMP0]], [[BB1]] ], [ true, [[LR_PH]] ]24; CHECK-NEXT:    [[DOT05_LCSSA:%.*]] = phi i32 [ 0, [[BB1]] ], [ -1, [[LR_PH]] ]25; CHECK-NEXT:    [[ADD1]] = add nsw i32 [[STOREMERGE]], -126; CHECK-NEXT:    br i1 [[PHIOFOPS]], label [[BB1]], label [[END:%.*]]27; CHECK:       end:28; CHECK-NEXT:    ret void29;30entry:31  br label %bb132 33bb1:                                      ; preds = %critedge, %entry34  %storemerge = phi i32 [ 0, %entry ], [ %add1, %critedge ]35  store i32 %storemerge, ptr @g_20, align 436  %cmp0 = icmp eq i32 %storemerge, 037  br i1 %cmp0, label %lr.ph, label %critedge38 39lr.ph:                                           ; preds = %bb140  %lv = load i64, ptr inttoptr (i64 16 to ptr), align 1641  %cmp1 = icmp eq i64 %lv, 042  br i1 %cmp1, label %preheader.split, label %critedge43 44preheader.split:                                 ; preds = %lr.ph, %preheader.split45  br label %preheader.split46 47critedge:                                        ; preds = %lr.ph, %bb148  %.05.lcssa = phi i32 [ 0, %bb1 ], [ -1, %lr.ph ]49  %cmp2 = icmp ne i32 %.05.lcssa, 050  %brmerge = or i1 %cmp0, %cmp251  %add1 = add nsw i32 %storemerge, -152  br i1 %brmerge, label %bb1, label %end53 54end:55  ret void56}57 58; In this test case a temporary PhiOfOps node gets moved to BB with more59; predecessors, so a new one needs to be created.60define void @test2(i1 %arg) {61; CHECK-LABEL: @test2(62; CHECK-NEXT:    br label [[BB1:%.*]]63; CHECK:       bb1:64; CHECK-NEXT:    [[STOREMERGE:%.*]] = phi i32 [ 0, [[TMP0:%.*]] ], [ [[ADD:%.*]], [[CRITEDGE:%.*]] ]65; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[STOREMERGE]], 066; CHECK-NEXT:    br i1 [[CMP1]], label [[LR_PH:%.*]], label [[CRITEDGE]]67; CHECK:       lr.ph:68; CHECK-NEXT:    br i1 %arg, label [[SPLIT1:%.*]], label [[SPLIT2:%.*]]69; CHECK:       split1:70; CHECK-NEXT:    br label [[CRITEDGE]]71; CHECK:       split2:72; CHECK-NEXT:    br label [[CRITEDGE]]73; CHECK:       critedge:74; CHECK-NEXT:    [[PHIOFOPS1:%.*]] = phi i1 [ false, [[BB1]] ], [ true, [[SPLIT2]] ], [ true, [[SPLIT1]] ]75; CHECK-NEXT:    [[PHIOFOPS:%.*]] = phi i1 [ [[CMP1]], [[BB1]] ], [ true, [[SPLIT2]] ], [ true, [[SPLIT1]] ]76; CHECK-NEXT:    [[LCSSA:%.*]] = phi i32 [ 0, [[BB1]] ], [ -1, [[SPLIT1]] ], [ -1, [[SPLIT2]] ]77; CHECK-NEXT:    [[ADD]] = add nsw i32 [[STOREMERGE]], -178; CHECK-NEXT:    br i1 [[PHIOFOPS]], label [[BB1]], label [[EXIT:%.*]]79; CHECK:       exit:80; CHECK-NEXT:    ret void81;82  br label %bb183 84bb1:                                      ; preds = %critedge, %085  %storemerge = phi i32 [ 0, %0 ], [ %add, %critedge ]86  %cmp1 = icmp eq i32 %storemerge, 087  br i1 %cmp1, label %lr.ph, label %critedge88 89lr.ph:                                           ; preds = %bb190  br i1 %arg, label %split1, label %split291 92split1:                                     ; preds = %lr.ph93  br label %critedge94 95split2:                                     ; preds = %lr.ph96  br label %critedge97 98critedge:                                        ; preds = %split1, %split2, %bb199  %lcssa = phi i32 [ 0, %bb1 ], [ -1, %split1 ], [ -1, %split2 ]100  %cmp2 = icmp ne i32 %lcssa, 0101  %brmerge = or i1 %cmp1, %cmp2102  %add = add nsw i32 %storemerge, -1103  br i1 %brmerge, label %bb1, label %exit104 105exit:                                      ; preds = %critedge106  ret void107}108