brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · b9cb1cb Raw
104 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=loop-vectorize -force-vector-width=2 %s -S | FileCheck %s3 4; Test case for PR47343. Make sure LCSSA phis are create correctly when5; expanding the memory runtime checks.6 7@f.e = external global i32, align 18@d = external global ptr, align 19 10declare i1 @cond()11 12define void @f() {13; CHECK-LABEL: @f(14; CHECK-NEXT:  entry:15; CHECK-NEXT:    br label [[OUTER_HEADER:%.*]]16; CHECK:       outer.header:17; CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr @d, align 118; CHECK-NEXT:    [[C_0:%.*]] = call i1 @cond()19; CHECK-NEXT:    br i1 [[C_0]], label [[OUTER_EXIT_0:%.*]], label [[INNER_1_HEADER_PREHEADER:%.*]]20; CHECK:       inner.1.header.preheader:21; CHECK-NEXT:    br label [[INNER_1_HEADER:%.*]]22; CHECK:       inner.1.header:23; CHECK-NEXT:    [[C_1:%.*]] = call i1 @cond()24; CHECK-NEXT:    br i1 [[C_1]], label [[INNER_1_LATCH:%.*]], label [[OUTER_LATCH:%.*]]25; CHECK:       inner.1.latch:26; CHECK-NEXT:    [[C_2:%.*]] = call i1 @cond()27; CHECK-NEXT:    br i1 [[C_2]], label [[OUTER_EXIT_1:%.*]], label [[INNER_1_HEADER]]28; CHECK:       outer.latch:29; CHECK-NEXT:    br label [[OUTER_HEADER]]30; CHECK:       outer.exit.0:31; CHECK-NEXT:    br label [[LOOP_PREHEADER:%.*]]32; CHECK:       outer.exit.1:33; CHECK-NEXT:    br label [[LOOP_PREHEADER]]34; CHECK:       loop.preheader:35; CHECK-NEXT:    br label [[VECTOR_MEMCHECK:%.*]]36; CHECK:       vector.memcheck:37; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, ptr [[TMP0]], i64 138; CHECK-NEXT:    [[BOUND0:%.*]] = icmp ult ptr @f.e, [[SCEVGEP]]39; CHECK-NEXT:    [[BOUND1:%.*]] = icmp ult ptr [[TMP0]], getelementptr inbounds nuw (i8, ptr @f.e, i64 4)40; CHECK-NEXT:    [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]]41; CHECK-NEXT:    br i1 [[FOUND_CONFLICT]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]42; CHECK:       vector.ph:43; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]44; CHECK:       vector.body:45; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]46; CHECK-NEXT:    store i32 0, ptr @f.e, align 1, !alias.scope [[META0:![0-9]+]], !noalias [[META3:![0-9]+]]47; CHECK-NEXT:    store i8 10, ptr [[TMP0]], align 1, !alias.scope [[META3]]48; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 249; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[INDEX_NEXT]], 50050; CHECK-NEXT:    br i1 [[TMP2]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]51; CHECK:       middle.block:52; CHECK-NEXT:    br label [[EXIT:%.*]]53; CHECK:       scalar.ph:54; CHECK-NEXT:    br label [[LOOP:%.*]]55; CHECK:       loop:56; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[IV_NEXT:%.*]], [[LOOP]] ], [ 0, [[SCALAR_PH]] ]57; CHECK-NEXT:    [[CONV6_US_US_US:%.*]] = zext i1 false to i3258; CHECK-NEXT:    store i32 [[CONV6_US_US_US]], ptr @f.e, align 159; CHECK-NEXT:    store i8 10, ptr [[TMP0]], align 160; CHECK-NEXT:    [[IV_NEXT]] = add nsw i32 [[IV]], 161; CHECK-NEXT:    [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], 50062; CHECK-NEXT:    br i1 [[EC]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP8:![0-9]+]]63; CHECK:       exit:64; CHECK-NEXT:    ret void65;66entry:67  br label %outer.header68 69outer.header:                            ; preds = %cleanup, %entry70  %0 = load ptr, ptr @d, align 171  %c.0 = call i1 @cond()72  br i1 %c.0, label %outer.exit.0, label %inner.1.header73 74inner.1.header:                                         ; preds = %if.end, %for.body3.lr.ph.outer75  %c.1 = call i1 @cond()76  br i1 %c.1, label %inner.1.latch, label %outer.latch77 78inner.1.latch:                                           ; preds = %land.end79  %c.2 = call i1 @cond()80  br i1 %c.2, label %outer.exit.1, label %inner.1.header81 82outer.latch:                                          ; preds = %land.end83  br label %outer.header84 85 86outer.exit.0:                                         ; preds = %if.end, %if.end.us.us.us87  br label %loop88 89outer.exit.1:                                         ; preds = %if.end, %if.end.us.us.us90  br label %loop91 92loop:                                  ; preds = %if.end.us.us.us, %for.body3.lr.ph.outer93  %iv = phi i32 [ %iv.next, %loop ], [ 0, %outer.exit.0 ], [ 0, %outer.exit.1 ]94  %conv6.us.us.us = zext i1 false to i3295  store i32 %conv6.us.us.us, ptr @f.e, align 196  store i8 10, ptr %0, align 197  %iv.next = add nsw i32 %iv, 198  %ec = icmp eq i32 %iv.next, 50099  br i1 %ec, label %exit, label %loop100 101exit:102  ret void103}104