brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · b8e0697 Raw
113 lines · plain
1; RUN: opt -mattr=+avx512f -passes=loop-vectorize -S < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NO-PREFER2; RUN: opt -mattr=+avx512vl,+prefer-256-bit -passes=loop-vectorize -S < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREFER-AVX2563 4target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-apple-macosx10.9.0"6 7; Verify that we generate 512-bit wide vectors for a basic integer memset8; loop.9 10; CHECK-NO-PREFER-LABEL: @f(11; CHECK-NO-PREFER: vector.body:12; CHECK-NO-PREFER: store <16 x i32>13; CHECK-NO-PREFER: vec.epilog.vector.body:14; CHECK-NO-PREFER: store <8 x i32>15 16; Verify that we don't generate 512-bit wide vectors when subtarget feature says not to17 18; CHECK-PREFER-AVX256-LABEL: @f(19; CHECK-PREFER-AVX256: vector.body:20; CHECK-PREFER-AVX256: store <8 x i32>21; CHECK-PREFER-AVX256: vec.epilog.vector.body:22; CHECK-PREFER-AVX256: store <4 x i32>23 24define void @f(ptr %a, i32 %n) {25entry:26  %cmp4 = icmp sgt i32 %n, 027  br i1 %cmp4, label %for.body.preheader, label %for.end28 29for.body.preheader:                               ; preds = %entry30  br label %for.body31 32for.body:                                         ; preds = %for.body.preheader, %for.body33  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %for.body.preheader ]34  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv35  store i32 %n, ptr %arrayidx, align 436  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 137  %lftr.wideiv = trunc i64 %indvars.iv.next to i3238  %exitcond = icmp eq i32 %lftr.wideiv, %n39  br i1 %exitcond, label %for.end.loopexit, label %for.body40 41for.end.loopexit:                                 ; preds = %for.body42  br label %for.end43 44for.end:                                          ; preds = %for.end.loopexit, %entry45  ret void46}47 48; Verify that the "prefer-vector-width=256" attribute prevents the use of 512-bit49; vectors50 51; CHECK-LABEL: @g(52; CHECK: vector.body:53; CHECK: store <8 x i32>54; CHECK: vec.epilog.vector.body:55; CHECK: store <4 x i32>56 57define void @g(ptr %a, i32 %n) "prefer-vector-width"="256" {58entry:59  %cmp4 = icmp sgt i32 %n, 060  br i1 %cmp4, label %for.body.preheader, label %for.end61 62for.body.preheader:                               ; preds = %entry63  br label %for.body64 65for.body:                                         ; preds = %for.body.preheader, %for.body66  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %for.body.preheader ]67  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv68  store i32 %n, ptr %arrayidx, align 469  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 170  %lftr.wideiv = trunc i64 %indvars.iv.next to i3271  %exitcond = icmp eq i32 %lftr.wideiv, %n72  br i1 %exitcond, label %for.end.loopexit, label %for.body73 74for.end.loopexit:                                 ; preds = %for.body75  br label %for.end76 77for.end:                                          ; preds = %for.end.loopexit, %entry78  ret void79}80 81; Verify that the "prefer-vector-width=512" attribute override the subtarget82; vectors83 84; CHECK-LABEL: @h(85; CHECK: vector.body:86; CHECK: store <16 x i32>87; CHECK: vec.epilog.vector.body:88; CHECK: store <8 x i32>89 90define void @h(ptr %a, i32 %n) "prefer-vector-width"="512" {91entry:92  %cmp4 = icmp sgt i32 %n, 093  br i1 %cmp4, label %for.body.preheader, label %for.end94 95for.body.preheader:                               ; preds = %entry96  br label %for.body97 98for.body:                                         ; preds = %for.body.preheader, %for.body99  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %for.body.preheader ]100  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv101  store i32 %n, ptr %arrayidx, align 4102  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1103  %lftr.wideiv = trunc i64 %indvars.iv.next to i32104  %exitcond = icmp eq i32 %lftr.wideiv, %n105  br i1 %exitcond, label %for.end.loopexit, label %for.body106 107for.end.loopexit:                                 ; preds = %for.body108  br label %for.end109 110for.end:                                          ; preds = %for.end.loopexit, %entry111  ret void112}113