brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.8 KiB · cce9ed2 Raw
142 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes='loop-vectorize' -force-vector-width=8 -force-vector-interleave=2 -S %s | FileCheck --check-prefixes=CHECK %s3 4target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"5 6define i64 @remove_loop_region_int_iv_used_outside(ptr %dst) {7; CHECK-LABEL: define i64 @remove_loop_region_int_iv_used_outside(8; CHECK-SAME: ptr [[DST:%.*]]) {9; CHECK-NEXT:  [[ENTRY:.*:]]10; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]11; CHECK:       [[VECTOR_PH]]:12; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]13; CHECK:       [[VECTOR_BODY]]:14; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr ptr, ptr [[DST]], i64 815; CHECK-NEXT:    store <8 x ptr> zeroinitializer, ptr [[DST]], align 816; CHECK-NEXT:    store <8 x ptr> zeroinitializer, ptr [[TMP2]], align 817; CHECK-NEXT:    br label %[[MIDDLE_BLOCK:.*]]18; CHECK:       [[MIDDLE_BLOCK]]:19; CHECK-NEXT:    br label %[[EXIT:.*]]20; CHECK:       [[EXIT]]:21; CHECK-NEXT:    ret i64 1522;23entry:24  br label %loop25 26loop:27  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]28  %gep = getelementptr ptr, ptr %dst, i64 %iv29  store ptr null, ptr %gep, align 830  %iv.next = add i64 %iv, 131  %ec = icmp eq i64 %iv.next, 1632  br i1 %ec, label %exit, label %loop33 34exit:35  %res = phi i64 [ %iv, %loop ]36  ret i64 %res37}38 39define i64 @remove_loop_region_int_iv_inc_used_outside(ptr %dst) {40; CHECK-LABEL: define i64 @remove_loop_region_int_iv_inc_used_outside(41; CHECK-SAME: ptr [[DST:%.*]]) {42; CHECK-NEXT:  [[ENTRY:.*:]]43; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]44; CHECK:       [[VECTOR_PH]]:45; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]46; CHECK:       [[VECTOR_BODY]]:47; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr ptr, ptr [[DST]], i64 848; CHECK-NEXT:    store <8 x ptr> zeroinitializer, ptr [[DST]], align 849; CHECK-NEXT:    store <8 x ptr> zeroinitializer, ptr [[TMP2]], align 850; CHECK-NEXT:    br label %[[MIDDLE_BLOCK:.*]]51; CHECK:       [[MIDDLE_BLOCK]]:52; CHECK-NEXT:    br label %[[EXIT:.*]]53; CHECK:       [[EXIT]]:54; CHECK-NEXT:    ret i64 1655;56entry:57  br label %loop58 59loop:60  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]61  %gep = getelementptr ptr, ptr %dst, i64 %iv62  store ptr null, ptr %gep, align 863  %iv.next = add i64 %iv, 164  %ec = icmp eq i64 %iv.next, 1665  br i1 %ec, label %exit, label %loop66 67exit:68  %res = phi i64 [ %iv.next, %loop ]69  ret i64 %res70}71 72define ptr @remove_loop_region_ptr_iv_used_outside(ptr %dst) {73; CHECK-LABEL: define ptr @remove_loop_region_ptr_iv_used_outside(74; CHECK-SAME: ptr [[DST:%.*]]) {75; CHECK-NEXT:  [[ENTRY:.*:]]76; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]77; CHECK:       [[VECTOR_PH]]:78; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[DST]], i64 12879; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]80; CHECK:       [[VECTOR_BODY]]:81; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr ptr, ptr [[DST]], i64 882; CHECK-NEXT:    store <8 x ptr> zeroinitializer, ptr [[DST]], align 883; CHECK-NEXT:    store <8 x ptr> zeroinitializer, ptr [[TMP2]], align 884; CHECK-NEXT:    br label %[[MIDDLE_BLOCK:.*]]85; CHECK:       [[MIDDLE_BLOCK]]:86; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = getelementptr i8, ptr [[TMP0]], i64 -887; CHECK-NEXT:    br label %[[EXIT:.*]]88; CHECK:       [[EXIT]]:89; CHECK-NEXT:    ret ptr [[IND_ESCAPE]]90;91entry:92  br label %loop93 94loop:95  %ptr.iv = phi ptr [ %dst, %entry ], [ %ptr.iv.next, %loop ]96  %int.iv = phi i64 [ 0, %entry ], [ %int.iv.next, %loop ]97  store ptr null, ptr %ptr.iv, align 898  %int.iv.next = add i64 %int.iv, 199  %ptr.iv.next = getelementptr i8, ptr %ptr.iv, i64 8100  %ec = icmp eq i64 %int.iv.next, 16101  br i1 %ec, label %exit, label %loop102 103exit:104  %res = phi ptr [ %ptr.iv, %loop ]105  ret ptr %res106}107 108define ptr @remove_loop_region_ptr_iv_inc_used_outside(ptr %dst) {109; CHECK-LABEL: define ptr @remove_loop_region_ptr_iv_inc_used_outside(110; CHECK-SAME: ptr [[DST:%.*]]) {111; CHECK-NEXT:  [[ENTRY:.*:]]112; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]113; CHECK:       [[VECTOR_PH]]:114; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[DST]], i64 128115; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]116; CHECK:       [[VECTOR_BODY]]:117; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr ptr, ptr [[DST]], i64 8118; CHECK-NEXT:    store <8 x ptr> zeroinitializer, ptr [[DST]], align 8119; CHECK-NEXT:    store <8 x ptr> zeroinitializer, ptr [[TMP2]], align 8120; CHECK-NEXT:    br label %[[MIDDLE_BLOCK:.*]]121; CHECK:       [[MIDDLE_BLOCK]]:122; CHECK-NEXT:    br label %[[EXIT:.*]]123; CHECK:       [[EXIT]]:124; CHECK-NEXT:    ret ptr [[TMP0]]125;126entry:127  br label %loop128 129loop:130  %ptr.iv = phi ptr [ %dst, %entry ], [ %ptr.iv.next, %loop ]131  %int.iv = phi i64 [ 0, %entry ], [ %int.iv.next, %loop ]132  store ptr null, ptr %ptr.iv, align 8133  %int.iv.next = add i64 %int.iv, 1134  %ptr.iv.next = getelementptr i8, ptr %ptr.iv, i64 8135  %ec = icmp eq i64 %int.iv.next, 16136  br i1 %ec, label %exit, label %loop137 138exit:139  %res = phi ptr [ %ptr.iv.next, %loop ]140  ret ptr %res141}142