brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 4251fe8 Raw
142 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=newgvn -S | FileCheck %s3; REQUIRES: asserts4 5target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"6target triple = "x86_64-grtev4-linux-gnu"7 8define hidden void @barrier() align 2 {9; CHECK-LABEL: @barrier(10; CHECK-NEXT:  entry:11; CHECK-NEXT:    [[CALLG:%.*]] = tail call i64 @g()12; CHECK-NEXT:    [[SEL:%.*]] = select i1 undef, i64 0, i64 [[CALLG]]13; CHECK-NEXT:    [[LOADED:%.*]] = load i64, ptr null, align 814; CHECK-NEXT:    [[ADD:%.*]] = add i64 [[LOADED]], 115; CHECK-NEXT:    [[SHR17:%.*]] = lshr i64 [[ADD]], 116; CHECK-NEXT:    [[SUB:%.*]] = add nsw i64 [[SHR17]], -117; CHECK-NEXT:    br label [[FIRST:%.*]]18; CHECK:       first:19; CHECK-NEXT:    [[PHI_ONE:%.*]] = phi i64 [ [[SEL]], [[ENTRY:%.*]] ], [ 0, [[FIRST]] ], [ 0, [[THIRD:%.*]] ]20; CHECK-NEXT:    [[CMP_PHI1_SUB:%.*]] = icmp eq i64 [[PHI_ONE]], [[SUB]]21; CHECK-NEXT:    br i1 [[CMP_PHI1_SUB]], label [[SECOND:%.*]], label [[FIRST]]22; CHECK:       second:23; CHECK-NEXT:    br label [[THIRD]]24; CHECK:       third:25; CHECK-NEXT:    br i1 false, label [[SECOND]], label [[FIRST]]26;27entry:28  %callg = tail call i64 @g()29  %sel = select i1 undef, i64 0, i64 %callg30 31  %loaded = load i64, ptr null, align 832  %add = add i64 %loaded, 133  %shr17 = lshr i64 %add, 134  %sub = add nsw i64 %shr17, -135 36  br label %first37 38first:39  %phi_one = phi i64 [ %sel, %entry ], [ 0, %first ], [ 0, %third ]40  %cmp_phi1_sub = icmp eq i64 %phi_one, %sub41  br i1 %cmp_phi1_sub, label %second, label %first42 43second:44  %phi_two = phi i64 [ %inc, %third ], [ %phi_one, %first ]45  br label %third46 47third:48  %inc = add i64 %phi_two, 149  %cmp_inc_sub = icmp eq i64 %inc, %sub50  br i1 %cmp_inc_sub, label %second, label %first51}52 53define hidden void @barrier2() align 2 {54; CHECK-LABEL: @barrier2(55; CHECK-NEXT:  entry:56; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr null, align 857; CHECK-NEXT:    [[CALL9:%.*]] = tail call i64 @g()58; CHECK-NEXT:    [[REM:%.*]] = select i1 undef, i64 0, i64 [[CALL9]]59; CHECK-NEXT:    [[ADD:%.*]] = add i64 [[TMP0]], 160; CHECK-NEXT:    [[SHR17:%.*]] = lshr i64 [[ADD]], 161; CHECK-NEXT:    [[SUB:%.*]] = add nsw i64 [[SHR17]], -162; CHECK-NEXT:    br label [[MAINLOOP:%.*]]63; CHECK:       second.exit:64; CHECK-NEXT:    br label [[FIRST_EXIT:%.*]]65; CHECK:       first.exit:66; CHECK-NEXT:    br label [[MAINLOOP]]67; CHECK:       mainloop:68; CHECK-NEXT:    [[FIRSTPHI:%.*]] = phi i64 [ [[REM]], [[ENTRY:%.*]] ], [ 0, [[FIRST_EXIT]] ]69; CHECK-NEXT:    [[FIRSTCMP:%.*]] = icmp eq i64 [[FIRSTPHI]], [[SUB]]70; CHECK-NEXT:    br i1 [[FIRSTCMP]], label [[SECOND_PREHEADER:%.*]], label [[FIRST_EXIT]]71; CHECK:       second.preheader:72; CHECK-NEXT:    br label [[INNERLOOP:%.*]]73; CHECK:       innerloop:74; CHECK-NEXT:    br label [[CLEANUP:%.*]]75; CHECK:       cleanup:76; CHECK-NEXT:    br i1 false, label [[INNERLOOP]], label [[SECOND_EXIT:%.*]]77;78entry:79  %0 = load i64, ptr null, align 880  %call9 = tail call i64 @g()81  %rem = select i1 undef, i64 0, i64 %call982  %add = add i64 %0, 183  %shr17 = lshr i64 %add, 184  %sub = add nsw i64 %shr17, -185  br label %mainloop86 87second.exit:                       ; preds = %cleanup88  br label %first.exit89 90first.exit:                                ; preds = %mainloop, %second.exit91  br label %mainloop92 93mainloop:                                         ; preds = %first.exit, %entry94  %firstphi = phi i64 [ %rem, %entry ], [ 0, %first.exit ]95  %firstcmp = icmp eq i64 %firstphi, %sub96  br i1 %firstcmp, label %second.preheader, label %first.exit97 98second.preheader:                          ; preds = %mainloop99  br label %innerloop100 101innerloop:                                    ; preds = %cleanup, %second.preheader102  %secondphi = phi i64 [ %inc, %cleanup ], [ %firstphi, %second.preheader ]103  br label %cleanup104 105cleanup:                                     ; preds = %innerloop106  %inc = add i64 %secondphi, 1107  %secondcmp = icmp eq i64 %inc, %sub108  br i1 %secondcmp, label %innerloop, label %second.exit109}110 111declare hidden i64 @g() local_unnamed_addr align 2112 113define void @barrier3(i64 %arg) {114; CHECK-LABEL: @barrier3(115; CHECK-NEXT:  entry:116; CHECK-NEXT:    br label [[FIRSTLOOP:%.*]]117; CHECK:       firstloop:118; CHECK-NEXT:    [[PHI1:%.*]] = phi i64 [ [[ARG:%.*]], [[ENTRY:%.*]] ], [ 0, [[FIRSTLOOP]] ]119; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i64 [[PHI1]], -1120; CHECK-NEXT:    br i1 [[CMP1]], label [[SECONDLOOP:%.*]], label [[FIRSTLOOP]]121; CHECK:       secondloop:122; CHECK-NEXT:    call void @llvm.assume(i1 false)123; CHECK-NEXT:    br label [[SECONDLOOP]]124;125entry:126  br label %firstloop127 128firstloop:129  %phi1 = phi i64 [ %arg, %entry ], [ 0, %firstloop ]130  %cmp1 = icmp eq i64 %phi1, -1131  br i1 %cmp1, label %secondloop, label %firstloop132 133secondloop:134  %phi2 = phi i64 [ %inc, %secondloop ], [ %phi1, %firstloop ]135  %inc = add i64 %phi2, 1136  %cmp2 = icmp eq i64 %inc, -1137  call void @llvm.assume(i1 %cmp2)138  br label %secondloop139}140 141declare void @llvm.assume(i1)142