1*cee313d2SEric Christopher; RUN: opt -passes='loop-vectorize' -mcpu=z13 -force-vector-width=2 -S < %s | FileCheck %s 2*cee313d2SEric Christopher; 3*cee313d2SEric Christopher; Forcing VF=2 to trigger vector code gen 4*cee313d2SEric Christopher; 5*cee313d2SEric Christopher; This is a test case to exercise more cases in truncateToMinimalBitWidths(). 6*cee313d2SEric Christopher; Test passes if vector code is generated w/o hitting llvm_unreachable(). 7*cee313d2SEric Christopher; 8*cee313d2SEric Christopher; Performing minimal check in the output to ensure the loop is actually 9*cee313d2SEric Christopher; vectorized. 10*cee313d2SEric Christopher; 11*cee313d2SEric Christopher; CHECK: vector.body 12*cee313d2SEric Christopher 13*cee313d2SEric Christophertarget datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64" 14*cee313d2SEric Christophertarget triple = "s390x-ibm-linux" 15*cee313d2SEric Christopher 16*cee313d2SEric Christopherdefine void @test(i32 zeroext %width, i8* nocapture %row, i16 zeroext %src, i16* nocapture readonly %dst) { 17*cee313d2SEric Christopherentry: 18*cee313d2SEric Christopher %cmp10 = icmp eq i32 %width, 0 19*cee313d2SEric Christopher br i1 %cmp10, label %for.end, label %for.body.lr.ph 20*cee313d2SEric Christopher 21*cee313d2SEric Christopherfor.body.lr.ph: ; preds = %entry 22*cee313d2SEric Christopher %conv1 = zext i16 %src to i32 23*cee313d2SEric Christopher br label %for.body 24*cee313d2SEric Christopher 25*cee313d2SEric Christopherfor.body: ; preds = %for.inc, %for.body.lr.ph 26*cee313d2SEric Christopher %i.012 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.inc ] 27*cee313d2SEric Christopher %sp.011 = phi i8* [ %row, %for.body.lr.ph ], [ %incdec.ptr, %for.inc ] 28*cee313d2SEric Christopher %0 = load i8, i8* %sp.011, align 1 29*cee313d2SEric Christopher %conv = zext i8 %0 to i32 30*cee313d2SEric Christopher %cmp2 = icmp eq i32 %conv, %conv1 31*cee313d2SEric Christopher br i1 %cmp2, label %if.then, label %for.inc 32*cee313d2SEric Christopher 33*cee313d2SEric Christopherif.then: ; preds = %for.body 34*cee313d2SEric Christopher %1 = load i16, i16* %dst, align 2 35*cee313d2SEric Christopher %conv4 = trunc i16 %1 to i8 36*cee313d2SEric Christopher store i8 %conv4, i8* %sp.011, align 1 37*cee313d2SEric Christopher br label %for.inc 38*cee313d2SEric Christopher 39*cee313d2SEric Christopherfor.inc: ; preds = %for.body, %if.then 40*cee313d2SEric Christopher %inc = add nuw i32 %i.012, 1 41*cee313d2SEric Christopher %incdec.ptr = getelementptr inbounds i8, i8* %sp.011, i64 1 42*cee313d2SEric Christopher %exitcond = icmp eq i32 %inc, %width 43*cee313d2SEric Christopher br i1 %exitcond, label %for.end.loopexit, label %for.body 44*cee313d2SEric Christopher 45*cee313d2SEric Christopherfor.end.loopexit: ; preds = %for.inc 46*cee313d2SEric Christopher br label %for.end 47*cee313d2SEric Christopher 48*cee313d2SEric Christopherfor.end: ; preds = %for.end.loopexit, %entry 49*cee313d2SEric Christopher ret void 50*cee313d2SEric Christopher} 51