brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · 3d6e074 Raw
141 lines · plain
1; RUN: opt < %s -passes=loop-vectorize -mcpu=pwr8 -mattr=+vsx -force-vector-interleave=1 -vectorizer-maximize-bandwidth=0 -S | FileCheck %s2 3target triple = "powerpc64-unknown-linux-gnu"4 5define signext i32 @foo(ptr readonly %ptr, i32 signext %l) {6entry:7  %idx.ext = sext i32 %l to i648  %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %idx.ext9  %cmp7 = icmp sgt i32 %l, 010  br i1 %cmp7, label %while.body.preheader, label %while.end11 12while.body.preheader:                             ; preds = %entry13  br label %while.body14 15while.body:                                       ; preds = %while.body.preheader, %while.body16  %count.09 = phi i32 [ %add, %while.body ], [ 0, %while.body.preheader ]17  %ptr.addr.08 = phi ptr [ %incdec.ptr, %while.body ], [ %ptr, %while.body.preheader ]18  %0 = load i8, ptr %ptr.addr.08, align 119  %cmp1 = icmp slt i8 %0, -6420  %cond = zext i1 %cmp1 to i3221  %add = add nsw i32 %cond, %count.0922  %incdec.ptr = getelementptr inbounds i8, ptr %ptr.addr.08, i64 123  %cmp = icmp ult ptr %incdec.ptr, %add.ptr24  br i1 %cmp, label %while.body, label %while.end.loopexit25 26while.end.loopexit:                               ; preds = %while.body27  %add.lcssa = phi i32 [ %add, %while.body ]28  br label %while.end29 30while.end:                                        ; preds = %while.end.loopexit, %entry31  %count.0.lcssa = phi i32 [ 0, %entry ], [ %add.lcssa, %while.end.loopexit ]32  ret i32 %count.0.lcssa33 34; CHECK: load <4 x i8>35; CHECK: icmp slt <4 x i8>36}37 38 39define signext i16 @foo2(ptr readonly %ptr, i32 signext %l) {40entry:41  %idx.ext = sext i32 %l to i6442  %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %idx.ext43  %cmp7 = icmp sgt i32 %l, 044  br i1 %cmp7, label %while.body.preheader, label %while.end45 46while.body.preheader:                             ; preds = %entry47  br label %while.body48 49while.body:                                       ; preds = %while.body.preheader, %while.body50  %count.09 = phi i16 [ %add, %while.body ], [ 0, %while.body.preheader ]51  %ptr.addr.08 = phi ptr [ %incdec.ptr, %while.body ], [ %ptr, %while.body.preheader ]52  %0 = load i8, ptr %ptr.addr.08, align 153  %cmp1 = icmp slt i8 %0, -6454  %cond = zext i1 %cmp1 to i1655  %add = add nsw i16 %cond, %count.0956  %incdec.ptr = getelementptr inbounds i8, ptr %ptr.addr.08, i64 157  %cmp = icmp ult ptr %incdec.ptr, %add.ptr58  br i1 %cmp, label %while.body, label %while.end.loopexit59 60while.end.loopexit:                               ; preds = %while.body61  %add.lcssa = phi i16 [ %add, %while.body ]62  br label %while.end63 64while.end:                                        ; preds = %while.end.loopexit, %entry65  %count.0.lcssa = phi i16 [ 0, %entry ], [ %add.lcssa, %while.end.loopexit ]66  ret i16 %count.0.lcssa67 68; CHECK-LABEL: foo269; CHECK: load <8 x i8>70; CHECK: icmp slt <8 x i8>71}72 73define signext i32 @foo3(ptr readonly %ptr, i32 signext %l) {74entry:75  %idx.ext = sext i32 %l to i6476  %add.ptr = getelementptr inbounds i16, ptr %ptr, i64 %idx.ext77  %cmp7 = icmp sgt i32 %l, 078  br i1 %cmp7, label %while.body.preheader, label %while.end79 80while.body.preheader:                             ; preds = %entry81  br label %while.body82 83while.body:                                       ; preds = %while.body.preheader, %while.body84  %count.09 = phi i32 [ %add, %while.body ], [ 0, %while.body.preheader ]85  %ptr.addr.16 = phi ptr [ %incdec.ptr, %while.body ], [ %ptr, %while.body.preheader ]86  %0 = load i16, ptr %ptr.addr.16, align 187  %cmp1 = icmp slt i16 %0, -6488  %cond = zext i1 %cmp1 to i3289  %add = add nsw i32 %cond, %count.0990  %incdec.ptr = getelementptr inbounds i16, ptr %ptr.addr.16, i64 191  %cmp = icmp ult ptr %incdec.ptr, %add.ptr92  br i1 %cmp, label %while.body, label %while.end.loopexit93 94while.end.loopexit:                               ; preds = %while.body95  %add.lcssa = phi i32 [ %add, %while.body ]96  br label %while.end97 98while.end:                                        ; preds = %while.end.loopexit, %entry99  %count.0.lcssa = phi i32 [ 0, %entry ], [ %add.lcssa, %while.end.loopexit ]100  ret i32 %count.0.lcssa101 102; CHECK-LABEL: foo3103; CHECK: load <4 x i16>104; CHECK: icmp slt <4 x i16>105}106 107define i64 @foo4(ptr readonly %ptr, i32 signext %l) {108entry:109  %idx.ext = sext i32 %l to i64110  %add.ptr = getelementptr inbounds i16, ptr %ptr, i64 %idx.ext111  %cmp7 = icmp sgt i32 %l, 0112  br i1 %cmp7, label %while.body.preheader, label %while.end113 114while.body.preheader:                             ; preds = %entry115  br label %while.body116 117while.body:                                       ; preds = %while.body.preheader, %while.body118  %count.09 = phi i64 [ %add, %while.body ], [ 0, %while.body.preheader ]119  %ptr.addr.16 = phi ptr [ %incdec.ptr, %while.body ], [ %ptr, %while.body.preheader ]120  %0 = load i16, ptr %ptr.addr.16, align 1121  %cmp1 = icmp slt i16 %0, -64122  %cond = zext i1 %cmp1 to i64123  %add = add nsw i64 %cond, %count.09124  %incdec.ptr = getelementptr inbounds i16, ptr %ptr.addr.16, i64 1125  %cmp = icmp ult ptr %incdec.ptr, %add.ptr126  br i1 %cmp, label %while.body, label %while.end.loopexit127 128while.end.loopexit:                               ; preds = %while.body129  %add.lcssa = phi i64 [ %add, %while.body ]130  br label %while.end131 132while.end:                                        ; preds = %while.end.loopexit, %entry133  %count.0.lcssa = phi i64 [ 0, %entry ], [ %add.lcssa, %while.end.loopexit ]134  ret i64 %count.0.lcssa135 136; CHECK-LABEL: foo4137; CHECK: load <2 x i16>138; CHECK: icmp slt <2 x i16>139}140 141