1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -S --passes=slp-vectorizer -mtriple=riscv64-unknown-linux-gnu -mcpu=sifive-x280 < %s | FileCheck %s
%struct.ImageParameters = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [9 x [16 x [16 x i16]]], [5 x [16 x [16 x i16]]], [9 x [8 x [8 x i16]]], [2 x [4 x [16 x [16 x i16]]]], [16 x [16 x i16]], [16 x [16 x i32]], ptr, ptr, ptr, ptr, ptr, [1200 x %struct.syntaxelement], ptr, ptr, i32, i32, i32, i32, [4 x [4 x i32]], i32, i32, i32, i32, i32, double, i32, i32, i32, i32, ptr, ptr, ptr, ptr, [15 x i16], i32, i32, i32, i32, i32, i32, i32, i32, [6 x [15 x i32]], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [1 x i32], i32, i32, [2 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [2 x i32], i32, i32, i32 }
%struct.syntaxelement = type { i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr }
@images = external global %struct.ImageParameters
define fastcc i32 @test(i32 %0, i32 %add111.i.i, <4 x i32> %PredPel.i.sroa.86.72.vec.extract, <4 x i32> %1) {
; CHECK-LABEL: define fastcc i32 @test(
; CHECK-SAME: i32 [[TMP0:%.*]], i32 [[ADD111_I_I:%.*]], <4 x i32> [[PREDPEL_I_SROA_86_72_VEC_EXTRACT:%.*]], <4 x i32> [[TMP1:%.*]]) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[LOOPARRAY_SROA_24_0_I_I3:%.*]] = ashr i32 [[TMP0]], 1
; CHECK-NEXT: [[SHR143_5_I_I9:%.*]] = ashr i32 [[TMP0]], 1
; CHECK-NEXT: [[ADD1392_I:%.*]] = add i32 [[TMP0]], 1
; CHECK-NEXT: [[PREDPEL_I_SROA_86_80_VEC_EXTRACT59312:%.*]] = extractelement <4 x i32> [[PREDPEL_I_SROA_86_72_VEC_EXTRACT]], i64 0
; CHECK-NEXT: [[MUL1445_I:%.*]] = shl i32 [[TMP0]], 1
; CHECK-NEXT: [[ADD2136_I:%.*]] = or i32 [[LOOPARRAY_SROA_24_0_I_I3]], [[TMP0]]
; CHECK-NEXT: [[SHR2137_I:%.*]] = lshr i32 [[ADD2136_I]], 1
; CHECK-NEXT: [[CONV2138_I:%.*]] = trunc i32 [[SHR2137_I]] to i16
; CHECK-NEXT: [[ADD2157_I:%.*]] = add i32 [[PREDPEL_I_SROA_86_80_VEC_EXTRACT59312]], 1
; CHECK-NEXT: [[SHR2158_I:%.*]] = lshr i32 [[ADD2157_I]], 1
; CHECK-NEXT: [[CONV2159_I:%.*]] = trunc i32 [[SHR2158_I]] to i16
; CHECK-NEXT: [[ADD2174_I:%.*]] = add i32 [[MUL1445_I]], 2
; CHECK-NEXT: [[SHR2175_I:%.*]] = lshr i32 [[ADD2174_I]], 2
; CHECK-NEXT: [[CONV2176_I:%.*]] = trunc i32 [[SHR2175_I]] to i16
; CHECK-NEXT: [[ADD2190_I:%.*]] = or i32 [[ADD1392_I]], 1
; CHECK-NEXT: [[ADD2191_I:%.*]] = add i32 [[ADD2190_I]], [[TMP0]]
; CHECK-NEXT: [[CONV2193_I:%.*]] = trunc i32 [[ADD2191_I]] to i16
; CHECK-NEXT: [[ADD2203_I:%.*]] = or i32 [[TMP0]], 1
; CHECK-NEXT: [[ADD2204_I:%.*]] = add i32 [[ADD2203_I]], [[TMP0]]
; CHECK-NEXT: [[CONV2206_I:%.*]] = trunc i32 [[ADD2204_I]] to i16
; CHECK-NEXT: [[ADD2235_I16:%.*]] = or i32 [[TMP0]], 1
; CHECK-NEXT: [[ADD2236_I:%.*]] = add i32 [[ADD2235_I16]], 1
; CHECK-NEXT: [[SHR2237_I:%.*]] = lshr i32 [[ADD2236_I]], 1
; CHECK-NEXT: [[CONV2238_I:%.*]] = trunc i32 [[SHR2237_I]] to i16
; CHECK-NEXT: store i16 [[CONV2238_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8196), align 4
; CHECK-NEXT: store i16 [[CONV2238_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8176), align 8
; CHECK-NEXT: [[ADD2258_I:%.*]] = or i32 [[ADD111_I_I]], [[TMP0]]
; CHECK-NEXT: [[SHR2259_I:%.*]] = lshr i32 [[ADD2258_I]], 1
; CHECK-NEXT: [[CONV2260_I:%.*]] = trunc i32 [[SHR2259_I]] to i16
; CHECK-NEXT: store i16 [[CONV2260_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8212), align 4
; CHECK-NEXT: store i16 [[CONV2260_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8192), align 8
; CHECK-NEXT: store i16 [[CONV2260_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8172), align 4
; CHECK-NEXT: [[ADD2280_I:%.*]] = add i32 [[ADD111_I_I]], 1
; CHECK-NEXT: [[SHR2281_I:%.*]] = lshr i32 [[ADD2280_I]], 1
; CHECK-NEXT: [[CONV2282_I:%.*]] = trunc i32 [[SHR2281_I]] to i16
; CHECK-NEXT: store i16 [[CONV2282_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8228), align 4
; CHECK-NEXT: store i16 [[CONV2282_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8208), align 8
; CHECK-NEXT: store i16 [[CONV2282_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8188), align 4
; CHECK-NEXT: [[ADD2302_I:%.*]] = add i32 [[TMP0]], 1
; CHECK-NEXT: [[SHR2303_I:%.*]] = lshr i32 [[ADD2302_I]], 1
; CHECK-NEXT: [[CONV2304_I:%.*]] = trunc i32 [[SHR2303_I]] to i16
; CHECK-NEXT: store i16 [[CONV2304_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8224), align 8
; CHECK-NEXT: store i16 [[CONV2304_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8204), align 4
; CHECK-NEXT: store i16 [[CONV2304_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8184), align 8
; CHECK-NEXT: [[ADD2323_I:%.*]] = add i32 [[TMP0]], 1
; CHECK-NEXT: [[ADD2324_I:%.*]] = or i32 [[ADD2323_I]], [[TMP0]]
; CHECK-NEXT: [[SHR2325_I:%.*]] = lshr i32 [[ADD2324_I]], 1
; CHECK-NEXT: [[CONV2326_I:%.*]] = trunc i32 [[SHR2325_I]] to i16
; CHECK-NEXT: store i16 [[CONV2326_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8220), align 4
; CHECK-NEXT: store i16 [[CONV2326_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8200), align 8
; CHECK-NEXT: [[ADD2342_I:%.*]] = add i32 [[SHR143_5_I_I9]], 1
; CHECK-NEXT: [[SHR2343_I:%.*]] = lshr i32 [[ADD2342_I]], 1
; CHECK-NEXT: [[CONV2344_I:%.*]] = trunc i32 [[SHR2343_I]] to i16
; CHECK-NEXT: store i16 [[CONV2344_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8216), align 8
; CHECK-NEXT: [[ADD2355_I:%.*]] = or i32 [[SHR143_5_I_I9]], 1
; CHECK-NEXT: [[ADD2356_I:%.*]] = add i32 [[ADD2355_I]], [[TMP0]]
; CHECK-NEXT: [[CONV2358_I:%.*]] = trunc i32 [[ADD2356_I]] to i16
; CHECK-NEXT: store i16 [[CONV2358_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8232), align 8
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <2 x i32> <i32 poison, i32 0>
; CHECK-NEXT: [[TMP3:%.*]] = insertelement <2 x i32> [[TMP2]], i32 [[LOOPARRAY_SROA_24_0_I_I3]], i32 0
; CHECK-NEXT: [[TMP4:%.*]] = add <2 x i32> [[TMP3]], splat (i32 1)
; CHECK-NEXT: [[TMP5:%.*]] = lshr <2 x i32> [[TMP4]], splat (i32 1)
; CHECK-NEXT: [[TMP6:%.*]] = trunc <2 x i32> [[TMP5]] to <2 x i16>
; CHECK-NEXT: store <2 x i16> [[TMP6]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8180), align 4
; CHECK-NEXT: [[ADD2393_I:%.*]] = or i32 [[LOOPARRAY_SROA_24_0_I_I3]], 1
; CHECK-NEXT: [[ADD2394_I:%.*]] = add i32 [[ADD2393_I]], [[TMP0]]
; CHECK-NEXT: [[CONV2396_I:%.*]] = trunc i32 [[ADD2394_I]] to i16
; CHECK-NEXT: store i16 [[CONV2396_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8198), align 2
; CHECK-NEXT: store i16 [[CONV2396_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8178), align 2
; CHECK-NEXT: store i16 [[CONV2138_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8214), align 2
; CHECK-NEXT: store i16 [[CONV2138_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8194), align 2
; CHECK-NEXT: store i16 [[CONV2138_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8174), align 2
; CHECK-NEXT: store i16 [[CONV2159_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8230), align 2
; CHECK-NEXT: store i16 [[CONV2159_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8210), align 2
; CHECK-NEXT: store i16 [[CONV2159_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8190), align 2
; CHECK-NEXT: store i16 [[CONV2159_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8170), align 2
; CHECK-NEXT: store i16 [[CONV2176_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8226), align 2
; CHECK-NEXT: store i16 [[CONV2176_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8206), align 2
; CHECK-NEXT: store i16 [[CONV2176_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8186), align 2
; CHECK-NEXT: store i16 [[CONV2193_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8222), align 2
; CHECK-NEXT: store i16 [[CONV2193_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8202), align 2
; CHECK-NEXT: store i16 [[CONV2206_I]], ptr getelementptr inbounds nuw (i8, ptr @images, i64 8218), align 2
; CHECK-NEXT: ret i32 0
;
entry:
%LoopArray.sroa.24.0.i.i3 = ashr i32 %0, 1
%shr143.5.i.i9 = ashr i32 %0, 1
%add1392.i = add i32 %0, 1
%PredPel.i.sroa.86.80.vec.extract59312 = extractelement <4 x i32> %PredPel.i.sroa.86.72.vec.extract, i64 0
%mul1445.i = shl i32 %0, 1
%PredPel.i.sroa.7.4.vec.extract446 = extractelement <4 x i32> %1, i64 0
%add1571.i = add i32 %PredPel.i.sroa.7.4.vec.extract446, 1
%shr1572.i = lshr i32 %add1571.i, 1
%conv1573.i = trunc i32 %shr1572.i to i16
%add2136.i = or i32 %LoopArray.sroa.24.0.i.i3, %0
%shr2137.i = lshr i32 %add2136.i, 1
%conv2138.i = trunc i32 %shr2137.i to i16
%add2157.i = add i32 %PredPel.i.sroa.86.80.vec.extract59312, 1
%shr2158.i = lshr i32 %add2157.i, 1
%conv2159.i = trunc i32 %shr2158.i to i16
%add2174.i = add i32 %mul1445.i, 2
%shr2175.i = lshr i32 %add2174.i, 2
%conv2176.i = trunc i32 %shr2175.i to i16
%add2190.i = or i32 %add1392.i, 1
%add2191.i = add i32 %add2190.i, %0
%conv2193.i = trunc i32 %add2191.i to i16
%add2203.i = or i32 %0, 1
%add2204.i = add i32 %add2203.i, %0
%conv2206.i = trunc i32 %add2204.i to i16
%add2214.i = add i32 %LoopArray.sroa.24.0.i.i3, 1
%shr2215.i = lshr i32 %add2214.i, 1
%conv2216.i = trunc i32 %shr2215.i to i16
store i16 %conv2216.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8180), align 4
%add2235.i16 = or i32 %0, 1
%add2236.i = add i32 %add2235.i16, 1
%shr2237.i = lshr i32 %add2236.i, 1
%conv2238.i = trunc i32 %shr2237.i to i16
store i16 %conv2238.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8196), align 4
store i16 %conv2238.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8176), align 8
%add2258.i = or i32 %add111.i.i, %0
%shr2259.i = lshr i32 %add2258.i, 1
%conv2260.i = trunc i32 %shr2259.i to i16
store i16 %conv2260.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8212), align 4
store i16 %conv2260.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8192), align 8
store i16 %conv2260.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8172), align 4
%add2280.i = add i32 %add111.i.i, 1
%shr2281.i = lshr i32 %add2280.i, 1
%conv2282.i = trunc i32 %shr2281.i to i16
store i16 %conv2282.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8228), align 4
store i16 %conv2282.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8208), align 8
store i16 %conv2282.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8188), align 4
%add2302.i = add i32 %0, 1
%shr2303.i = lshr i32 %add2302.i, 1
%conv2304.i = trunc i32 %shr2303.i to i16
store i16 %conv2304.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8224), align 8
store i16 %conv2304.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8204), align 4
store i16 %conv2304.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8184), align 8
%add2323.i = add i32 %0, 1
%add2324.i = or i32 %add2323.i, %0
%shr2325.i = lshr i32 %add2324.i, 1
%conv2326.i = trunc i32 %shr2325.i to i16
store i16 %conv2326.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8220), align 4
store i16 %conv2326.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8200), align 8
%add2342.i = add i32 %shr143.5.i.i9, 1
%shr2343.i = lshr i32 %add2342.i, 1
%conv2344.i = trunc i32 %shr2343.i to i16
store i16 %conv2344.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8216), align 8
%add2355.i = or i32 %shr143.5.i.i9, 1
%add2356.i = add i32 %add2355.i, %0
%conv2358.i = trunc i32 %add2356.i to i16
store i16 %conv2358.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8232), align 8
store i16 %conv1573.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8182), align 2
%add2393.i = or i32 %LoopArray.sroa.24.0.i.i3, 1
%add2394.i = add i32 %add2393.i, %0
%conv2396.i = trunc i32 %add2394.i to i16
store i16 %conv2396.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8198), align 2
store i16 %conv2396.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8178), align 2
store i16 %conv2138.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8214), align 2
store i16 %conv2138.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8194), align 2
store i16 %conv2138.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8174), align 2
store i16 %conv2159.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8230), align 2
store i16 %conv2159.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8210), align 2
store i16 %conv2159.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8190), align 2
store i16 %conv2159.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8170), align 2
store i16 %conv2176.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8226), align 2
store i16 %conv2176.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8206), align 2
store i16 %conv2176.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8186), align 2
store i16 %conv2193.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8222), align 2
store i16 %conv2193.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8202), align 2
store i16 %conv2206.i, ptr getelementptr inbounds nuw (i8, ptr @images, i64 8218), align 2
ret i32 0
}
|