1100fd0cdSAlexey Bataev; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 2100fd0cdSAlexey Bataev; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -slp-threshold=-1000 < %s | FileCheck %s 3100fd0cdSAlexey Bataev 4100fd0cdSAlexey Bataevdefine void @e(ptr %c, i64 %0) { 5100fd0cdSAlexey Bataev; CHECK-LABEL: define void @e( 6100fd0cdSAlexey Bataev; CHECK-SAME: ptr [[C:%.*]], i64 [[TMP0:%.*]]) { 7100fd0cdSAlexey Bataev; CHECK-NEXT: [[ENTRY:.*:]] 8100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[C]], align 8 9100fd0cdSAlexey Bataev; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i8, ptr [[TMP1]], i64 96 104b1b51acSAlexey Bataev; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr i8, ptr [[TMP1]], i64 104 114b1b51acSAlexey Bataev; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8 12100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[C]], align 8 134b1b51acSAlexey Bataev; CHECK-NEXT: [[TMP18:%.*]] = load <2 x ptr>, ptr [[ARRAYIDX5]], align 8 144b1b51acSAlexey Bataev; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <2 x ptr> [[TMP18]], <2 x ptr> poison, <2 x i32> <i32 1, i32 0> 15100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP5:%.*]] = insertelement <2 x ptr> poison, ptr [[TMP3]], i32 0 16100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <2 x ptr> [[TMP5]], <2 x ptr> poison, <2 x i32> zeroinitializer 17100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP7:%.*]] = insertelement <6 x ptr> poison, ptr [[TMP2]], i32 2 18100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP8:%.*]] = insertelement <6 x ptr> [[TMP7]], ptr [[TMP1]], i32 3 19100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP9:%.*]] = call <6 x ptr> @llvm.vector.insert.v6p0.v2p0(<6 x ptr> [[TMP8]], <2 x ptr> [[TMP4]], i64 0) 20100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP10:%.*]] = call <6 x ptr> @llvm.vector.insert.v6p0.v2p0(<6 x ptr> [[TMP9]], <2 x ptr> [[TMP6]], i64 4) 21100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP11:%.*]] = ptrtoint <6 x ptr> [[TMP10]] to <6 x i64> 224b1b51acSAlexey Bataev; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <6 x i64> [[TMP11]], <6 x i64> poison, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3, i32 3, i32 4, i32 4, i32 4, i32 4, i32 5, i32 5, i32 5> 23100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP13:%.*]] = insertelement <32 x i64> poison, i64 [[TMP0]], i32 0 24100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <32 x i64> [[TMP13]], <32 x i64> poison, <32 x i32> zeroinitializer 25100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP15:%.*]] = or <32 x i64> [[TMP14]], [[TMP12]] 26*38fffa63SPaul Walker; CHECK-NEXT: [[TMP16:%.*]] = icmp ult <32 x i64> [[TMP15]], splat (i64 16) 27100fd0cdSAlexey Bataev; CHECK-NEXT: [[TMP17:%.*]] = call i1 @llvm.vector.reduce.or.v32i1(<32 x i1> [[TMP16]]) 28100fd0cdSAlexey Bataev; CHECK-NEXT: br i1 [[TMP17]], label %[[FOR_BODY:.*]], label %[[VECTOR_PH:.*]] 29100fd0cdSAlexey Bataev; CHECK: [[VECTOR_PH]]: 30100fd0cdSAlexey Bataev; CHECK-NEXT: ret void 31100fd0cdSAlexey Bataev; CHECK: [[FOR_BODY]]: 32100fd0cdSAlexey Bataev; CHECK-NEXT: ret void 33100fd0cdSAlexey Bataev; 34100fd0cdSAlexey Bataeventry: 35100fd0cdSAlexey Bataev %1 = load ptr, ptr %c, align 8 36100fd0cdSAlexey Bataev %arrayidx = getelementptr i8, ptr %1, i64 96 37100fd0cdSAlexey Bataev %arrayidx1 = getelementptr i8, ptr %1, i64 112 38100fd0cdSAlexey Bataev %2 = load ptr, ptr %arrayidx1, align 8 39100fd0cdSAlexey Bataev %arrayidx5 = getelementptr i8, ptr %1, i64 104 40100fd0cdSAlexey Bataev %3 = load ptr, ptr %arrayidx5, align 8 41100fd0cdSAlexey Bataev %4 = load ptr, ptr %arrayidx, align 8 42100fd0cdSAlexey Bataev %5 = load ptr, ptr %c, align 8 43100fd0cdSAlexey Bataev %6 = ptrtoint ptr %5 to i64 44100fd0cdSAlexey Bataev %7 = ptrtoint ptr %5 to i64 45100fd0cdSAlexey Bataev %8 = ptrtoint ptr %1 to i64 46100fd0cdSAlexey Bataev %9 = ptrtoint ptr %4 to i64 47100fd0cdSAlexey Bataev %10 = ptrtoint ptr %3 to i64 48100fd0cdSAlexey Bataev %11 = ptrtoint ptr %2 to i64 49100fd0cdSAlexey Bataev %12 = or i64 %0, %11 50100fd0cdSAlexey Bataev %dc64 = icmp ult i64 %12, 16 51100fd0cdSAlexey Bataev %13 = or i64 %0, %11 52100fd0cdSAlexey Bataev %dc65 = icmp ult i64 %13, 16 53100fd0cdSAlexey Bataev %cr66 = or i1 %dc64, %dc65 54100fd0cdSAlexey Bataev %14 = or i64 %0, %11 55100fd0cdSAlexey Bataev %dc67 = icmp ult i64 %14, 16 56100fd0cdSAlexey Bataev %cr68 = or i1 %cr66, %dc67 57100fd0cdSAlexey Bataev %15 = or i64 %0, %11 58100fd0cdSAlexey Bataev %dc69 = icmp ult i64 %15, 16 59100fd0cdSAlexey Bataev %cr70 = or i1 %cr68, %dc69 60100fd0cdSAlexey Bataev %16 = or i64 %0, %11 61100fd0cdSAlexey Bataev %dc71 = icmp ult i64 %16, 16 62100fd0cdSAlexey Bataev %cr72 = or i1 %cr70, %dc71 63100fd0cdSAlexey Bataev %17 = or i64 %0, %11 64100fd0cdSAlexey Bataev %dc73 = icmp ult i64 %17, 16 65100fd0cdSAlexey Bataev %cr74 = or i1 %cr72, %dc73 66100fd0cdSAlexey Bataev %18 = or i64 %0, %11 67100fd0cdSAlexey Bataev %dc75 = icmp ult i64 %18, 16 68100fd0cdSAlexey Bataev %cr76 = or i1 %cr74, %dc75 69100fd0cdSAlexey Bataev %19 = or i64 %0, %10 70100fd0cdSAlexey Bataev %dc77 = icmp ult i64 %19, 16 71100fd0cdSAlexey Bataev %cr78 = or i1 %cr76, %dc77 72100fd0cdSAlexey Bataev %20 = or i64 %0, %10 73100fd0cdSAlexey Bataev %dc79 = icmp ult i64 %20, 16 74100fd0cdSAlexey Bataev %cr80 = or i1 %cr78, %dc79 75100fd0cdSAlexey Bataev %21 = or i64 %0, %10 76100fd0cdSAlexey Bataev %dc81 = icmp ult i64 %21, 16 77100fd0cdSAlexey Bataev %cr82 = or i1 %cr80, %dc81 78100fd0cdSAlexey Bataev %22 = or i64 %0, %10 79100fd0cdSAlexey Bataev %dc83 = icmp ult i64 %22, 16 80100fd0cdSAlexey Bataev %cr84 = or i1 %cr82, %dc83 81100fd0cdSAlexey Bataev %23 = or i64 %0, %10 82100fd0cdSAlexey Bataev %dc85 = icmp ult i64 %23, 16 83100fd0cdSAlexey Bataev %cr86 = or i1 %cr84, %dc85 84100fd0cdSAlexey Bataev %24 = or i64 %0, %10 85100fd0cdSAlexey Bataev %dc87 = icmp ult i64 %24, 16 86100fd0cdSAlexey Bataev %cr88 = or i1 %cr86, %dc87 87100fd0cdSAlexey Bataev %25 = or i64 %0, %10 88100fd0cdSAlexey Bataev %dc89 = icmp ult i64 %25, 16 89100fd0cdSAlexey Bataev %cr90 = or i1 %cr88, %dc89 90100fd0cdSAlexey Bataev %26 = or i64 %0, %9 91100fd0cdSAlexey Bataev %dc91 = icmp ult i64 %26, 16 92100fd0cdSAlexey Bataev %cr92 = or i1 %cr90, %dc91 93100fd0cdSAlexey Bataev %27 = or i64 %0, %9 94100fd0cdSAlexey Bataev %dc93 = icmp ult i64 %27, 16 95100fd0cdSAlexey Bataev %cr94 = or i1 %cr92, %dc93 96100fd0cdSAlexey Bataev %28 = or i64 %0, %9 97100fd0cdSAlexey Bataev %dc95 = icmp ult i64 %28, 16 98100fd0cdSAlexey Bataev %cr96 = or i1 %cr94, %dc95 99100fd0cdSAlexey Bataev %29 = or i64 %0, %9 100100fd0cdSAlexey Bataev %dc97 = icmp ult i64 %29, 16 101100fd0cdSAlexey Bataev %cr98 = or i1 %cr96, %dc97 102100fd0cdSAlexey Bataev %30 = or i64 %0, %9 103100fd0cdSAlexey Bataev %dc99 = icmp ult i64 %30, 16 104100fd0cdSAlexey Bataev %cr100 = or i1 %cr98, %dc99 105100fd0cdSAlexey Bataev %31 = or i64 %0, %9 106100fd0cdSAlexey Bataev %dc101 = icmp ult i64 %31, 16 107100fd0cdSAlexey Bataev %cr102 = or i1 %cr100, %dc101 108100fd0cdSAlexey Bataev %32 = or i64 %0, %8 109100fd0cdSAlexey Bataev %dc103 = icmp ult i64 %32, 16 110100fd0cdSAlexey Bataev %cr104 = or i1 %cr102, %dc103 111100fd0cdSAlexey Bataev %33 = or i64 %0, %8 112100fd0cdSAlexey Bataev %dc105 = icmp ult i64 %33, 16 113100fd0cdSAlexey Bataev %cr106 = or i1 %cr104, %dc105 114100fd0cdSAlexey Bataev %34 = or i64 %0, %8 115100fd0cdSAlexey Bataev %dc107 = icmp ult i64 %34, 16 116100fd0cdSAlexey Bataev %cr108 = or i1 %cr106, %dc107 117100fd0cdSAlexey Bataev %35 = or i64 %0, %8 118100fd0cdSAlexey Bataev %dc109 = icmp ult i64 %35, 16 119100fd0cdSAlexey Bataev %cr110 = or i1 %cr108, %dc109 120100fd0cdSAlexey Bataev %36 = or i64 %0, %8 121100fd0cdSAlexey Bataev %dc111 = icmp ult i64 %36, 16 122100fd0cdSAlexey Bataev %cr112 = or i1 %cr110, %dc111 123100fd0cdSAlexey Bataev %37 = or i64 %0, %7 124100fd0cdSAlexey Bataev %dc113 = icmp ult i64 %37, 16 125100fd0cdSAlexey Bataev %cr114 = or i1 %cr112, %dc113 126100fd0cdSAlexey Bataev %38 = or i64 %0, %7 127100fd0cdSAlexey Bataev %dc115 = icmp ult i64 %38, 16 128100fd0cdSAlexey Bataev %cr116 = or i1 %cr114, %dc115 129100fd0cdSAlexey Bataev %39 = or i64 %0, %7 130100fd0cdSAlexey Bataev %dc117 = icmp ult i64 %39, 16 131100fd0cdSAlexey Bataev %cr118 = or i1 %cr116, %dc117 132100fd0cdSAlexey Bataev %40 = or i64 %0, %7 133100fd0cdSAlexey Bataev %dc119 = icmp ult i64 %40, 16 134100fd0cdSAlexey Bataev %cr120 = or i1 %cr118, %dc119 135100fd0cdSAlexey Bataev %41 = or i64 %0, %6 136100fd0cdSAlexey Bataev %dc121 = icmp ult i64 %41, 16 137100fd0cdSAlexey Bataev %cr122 = or i1 %cr120, %dc121 138100fd0cdSAlexey Bataev %42 = or i64 %0, %6 139100fd0cdSAlexey Bataev %dc123 = icmp ult i64 %42, 16 140100fd0cdSAlexey Bataev %cr124 = or i1 %cr122, %dc123 141100fd0cdSAlexey Bataev %43 = or i64 %0, %6 142100fd0cdSAlexey Bataev %dc125 = icmp ult i64 %43, 16 143100fd0cdSAlexey Bataev %cr126 = or i1 %cr124, %dc125 144100fd0cdSAlexey Bataev br i1 %cr126, label %for.body, label %vector.ph 145100fd0cdSAlexey Bataev 146100fd0cdSAlexey Bataevvector.ph: 147100fd0cdSAlexey Bataev ret void 148100fd0cdSAlexey Bataev 149100fd0cdSAlexey Bataevfor.body: 150100fd0cdSAlexey Bataev ret void 151100fd0cdSAlexey Bataev} 152