1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -mtriple=x86_64-unknown -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=SSE 3; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX 4; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX 5; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX 6 7; 8; 128-bit Vectors 9; 10 11define <2 x double> @buildvector_add_2f64(<2 x double> %a, <2 x double> %b) { 12; CHECK-LABEL: @buildvector_add_2f64( 13; CHECK-NEXT: [[TMP1:%.*]] = fadd <2 x double> %a, %b 14; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0 15; CHECK-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0 16; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1 17; CHECK-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1 18; CHECK-NEXT: ret <2 x double> [[R1]] 19; 20 %a0 = extractelement <2 x double> %a, i32 0 21 %a1 = extractelement <2 x double> %a, i32 1 22 %b0 = extractelement <2 x double> %b, i32 0 23 %b1 = extractelement <2 x double> %b, i32 1 24 %c0 = fadd double %a0, %b0 25 %c1 = fadd double %a1, %b1 26 %r0 = insertelement <2 x double> undef, double %c0, i32 0 27 %r1 = insertelement <2 x double> %r0, double %c1, i32 1 28 ret <2 x double> %r1 29} 30 31define <2 x double> @buildvector_sub_2f64(<2 x double> %a, <2 x double> %b) { 32; CHECK-LABEL: @buildvector_sub_2f64( 33; CHECK-NEXT: [[TMP1:%.*]] = fsub <2 x double> %a, %b 34; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0 35; CHECK-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0 36; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1 37; CHECK-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1 38; CHECK-NEXT: ret <2 x double> [[R1]] 39; 40 %a0 = extractelement <2 x double> %a, i32 0 41 %a1 = extractelement <2 x double> %a, i32 1 42 %b0 = extractelement <2 x double> %b, i32 0 43 %b1 = extractelement <2 x double> %b, i32 1 44 %c0 = fsub double %a0, %b0 45 %c1 = fsub double %a1, %b1 46 %r0 = insertelement <2 x double> undef, double %c0, i32 0 47 %r1 = insertelement <2 x double> %r0, double %c1, i32 1 48 ret <2 x double> %r1 49} 50 51define <2 x double> @buildvector_mul_2f64(<2 x double> %a, <2 x double> %b) { 52; CHECK-LABEL: @buildvector_mul_2f64( 53; CHECK-NEXT: [[TMP1:%.*]] = fmul <2 x double> %a, %b 54; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0 55; CHECK-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0 56; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1 57; CHECK-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1 58; CHECK-NEXT: ret <2 x double> [[R1]] 59; 60 %a0 = extractelement <2 x double> %a, i32 0 61 %a1 = extractelement <2 x double> %a, i32 1 62 %b0 = extractelement <2 x double> %b, i32 0 63 %b1 = extractelement <2 x double> %b, i32 1 64 %c0 = fmul double %a0, %b0 65 %c1 = fmul double %a1, %b1 66 %r0 = insertelement <2 x double> undef, double %c0, i32 0 67 %r1 = insertelement <2 x double> %r0, double %c1, i32 1 68 ret <2 x double> %r1 69} 70 71define <2 x double> @buildvector_div_2f64(<2 x double> %a, <2 x double> %b) { 72; CHECK-LABEL: @buildvector_div_2f64( 73; CHECK-NEXT: [[TMP1:%.*]] = fdiv <2 x double> %a, %b 74; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0 75; CHECK-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0 76; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1 77; CHECK-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1 78; CHECK-NEXT: ret <2 x double> [[R1]] 79; 80 %a0 = extractelement <2 x double> %a, i32 0 81 %a1 = extractelement <2 x double> %a, i32 1 82 %b0 = extractelement <2 x double> %b, i32 0 83 %b1 = extractelement <2 x double> %b, i32 1 84 %c0 = fdiv double %a0, %b0 85 %c1 = fdiv double %a1, %b1 86 %r0 = insertelement <2 x double> undef, double %c0, i32 0 87 %r1 = insertelement <2 x double> %r0, double %c1, i32 1 88 ret <2 x double> %r1 89} 90 91define <4 x float> @buildvector_add_4f32(<4 x float> %a, <4 x float> %b) { 92; CHECK-LABEL: @buildvector_add_4f32( 93; CHECK-NEXT: [[TMP1:%.*]] = fadd <4 x float> %a, %b 94; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x float> [[TMP1]], i32 0 95; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x float> undef, float [[TMP2]], i32 0 96; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x float> [[TMP1]], i32 1 97; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x float> [[R0]], float [[TMP3]], i32 1 98; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x float> [[TMP1]], i32 2 99; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x float> [[R1]], float [[TMP4]], i32 2 100; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x float> [[TMP1]], i32 3 101; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x float> [[R2]], float [[TMP5]], i32 3 102; CHECK-NEXT: ret <4 x float> [[R3]] 103; 104 %a0 = extractelement <4 x float> %a, i32 0 105 %a1 = extractelement <4 x float> %a, i32 1 106 %a2 = extractelement <4 x float> %a, i32 2 107 %a3 = extractelement <4 x float> %a, i32 3 108 %b0 = extractelement <4 x float> %b, i32 0 109 %b1 = extractelement <4 x float> %b, i32 1 110 %b2 = extractelement <4 x float> %b, i32 2 111 %b3 = extractelement <4 x float> %b, i32 3 112 %c0 = fadd float %a0, %b0 113 %c1 = fadd float %a1, %b1 114 %c2 = fadd float %a2, %b2 115 %c3 = fadd float %a3, %b3 116 %r0 = insertelement <4 x float> undef, float %c0, i32 0 117 %r1 = insertelement <4 x float> %r0, float %c1, i32 1 118 %r2 = insertelement <4 x float> %r1, float %c2, i32 2 119 %r3 = insertelement <4 x float> %r2, float %c3, i32 3 120 ret <4 x float> %r3 121} 122 123define <4 x float> @buildvector_sub_4f32(<4 x float> %a, <4 x float> %b) { 124; CHECK-LABEL: @buildvector_sub_4f32( 125; CHECK-NEXT: [[TMP1:%.*]] = fsub <4 x float> %a, %b 126; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x float> [[TMP1]], i32 0 127; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x float> undef, float [[TMP2]], i32 0 128; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x float> [[TMP1]], i32 1 129; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x float> [[R0]], float [[TMP3]], i32 1 130; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x float> [[TMP1]], i32 2 131; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x float> [[R1]], float [[TMP4]], i32 2 132; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x float> [[TMP1]], i32 3 133; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x float> [[R2]], float [[TMP5]], i32 3 134; CHECK-NEXT: ret <4 x float> [[R3]] 135; 136 %a0 = extractelement <4 x float> %a, i32 0 137 %a1 = extractelement <4 x float> %a, i32 1 138 %a2 = extractelement <4 x float> %a, i32 2 139 %a3 = extractelement <4 x float> %a, i32 3 140 %b0 = extractelement <4 x float> %b, i32 0 141 %b1 = extractelement <4 x float> %b, i32 1 142 %b2 = extractelement <4 x float> %b, i32 2 143 %b3 = extractelement <4 x float> %b, i32 3 144 %c0 = fsub float %a0, %b0 145 %c1 = fsub float %a1, %b1 146 %c2 = fsub float %a2, %b2 147 %c3 = fsub float %a3, %b3 148 %r0 = insertelement <4 x float> undef, float %c0, i32 0 149 %r1 = insertelement <4 x float> %r0, float %c1, i32 1 150 %r2 = insertelement <4 x float> %r1, float %c2, i32 2 151 %r3 = insertelement <4 x float> %r2, float %c3, i32 3 152 ret <4 x float> %r3 153} 154 155define <4 x float> @buildvector_mul_4f32(<4 x float> %a, <4 x float> %b) { 156; CHECK-LABEL: @buildvector_mul_4f32( 157; CHECK-NEXT: [[TMP1:%.*]] = fmul <4 x float> %a, %b 158; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x float> [[TMP1]], i32 0 159; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x float> undef, float [[TMP2]], i32 0 160; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x float> [[TMP1]], i32 1 161; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x float> [[R0]], float [[TMP3]], i32 1 162; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x float> [[TMP1]], i32 2 163; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x float> [[R1]], float [[TMP4]], i32 2 164; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x float> [[TMP1]], i32 3 165; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x float> [[R2]], float [[TMP5]], i32 3 166; CHECK-NEXT: ret <4 x float> [[R3]] 167; 168 %a0 = extractelement <4 x float> %a, i32 0 169 %a1 = extractelement <4 x float> %a, i32 1 170 %a2 = extractelement <4 x float> %a, i32 2 171 %a3 = extractelement <4 x float> %a, i32 3 172 %b0 = extractelement <4 x float> %b, i32 0 173 %b1 = extractelement <4 x float> %b, i32 1 174 %b2 = extractelement <4 x float> %b, i32 2 175 %b3 = extractelement <4 x float> %b, i32 3 176 %c0 = fmul float %a0, %b0 177 %c1 = fmul float %a1, %b1 178 %c2 = fmul float %a2, %b2 179 %c3 = fmul float %a3, %b3 180 %r0 = insertelement <4 x float> undef, float %c0, i32 0 181 %r1 = insertelement <4 x float> %r0, float %c1, i32 1 182 %r2 = insertelement <4 x float> %r1, float %c2, i32 2 183 %r3 = insertelement <4 x float> %r2, float %c3, i32 3 184 ret <4 x float> %r3 185} 186 187define <4 x float> @buildvector_div_4f32(<4 x float> %a, <4 x float> %b) { 188; CHECK-LABEL: @buildvector_div_4f32( 189; CHECK-NEXT: [[TMP1:%.*]] = fdiv <4 x float> %a, %b 190; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x float> [[TMP1]], i32 0 191; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x float> undef, float [[TMP2]], i32 0 192; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x float> [[TMP1]], i32 1 193; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x float> [[R0]], float [[TMP3]], i32 1 194; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x float> [[TMP1]], i32 2 195; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x float> [[R1]], float [[TMP4]], i32 2 196; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x float> [[TMP1]], i32 3 197; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x float> [[R2]], float [[TMP5]], i32 3 198; CHECK-NEXT: ret <4 x float> [[R3]] 199; 200 %a0 = extractelement <4 x float> %a, i32 0 201 %a1 = extractelement <4 x float> %a, i32 1 202 %a2 = extractelement <4 x float> %a, i32 2 203 %a3 = extractelement <4 x float> %a, i32 3 204 %b0 = extractelement <4 x float> %b, i32 0 205 %b1 = extractelement <4 x float> %b, i32 1 206 %b2 = extractelement <4 x float> %b, i32 2 207 %b3 = extractelement <4 x float> %b, i32 3 208 %c0 = fdiv float %a0, %b0 209 %c1 = fdiv float %a1, %b1 210 %c2 = fdiv float %a2, %b2 211 %c3 = fdiv float %a3, %b3 212 %r0 = insertelement <4 x float> undef, float %c0, i32 0 213 %r1 = insertelement <4 x float> %r0, float %c1, i32 1 214 %r2 = insertelement <4 x float> %r1, float %c2, i32 2 215 %r3 = insertelement <4 x float> %r2, float %c3, i32 3 216 ret <4 x float> %r3 217} 218 219; 220; 256-bit Vectors 221; 222 223define <4 x double> @buildvector_add_4f64(<4 x double> %a, <4 x double> %b) { 224; CHECK-LABEL: @buildvector_add_4f64( 225; CHECK-NEXT: [[TMP1:%.*]] = fadd <4 x double> %a, %b 226; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0 227; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0 228; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1 229; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1 230; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2 231; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2 232; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3 233; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3 234; CHECK-NEXT: ret <4 x double> [[R3]] 235; 236 %a0 = extractelement <4 x double> %a, i32 0 237 %a1 = extractelement <4 x double> %a, i32 1 238 %a2 = extractelement <4 x double> %a, i32 2 239 %a3 = extractelement <4 x double> %a, i32 3 240 %b0 = extractelement <4 x double> %b, i32 0 241 %b1 = extractelement <4 x double> %b, i32 1 242 %b2 = extractelement <4 x double> %b, i32 2 243 %b3 = extractelement <4 x double> %b, i32 3 244 %c0 = fadd double %a0, %b0 245 %c1 = fadd double %a1, %b1 246 %c2 = fadd double %a2, %b2 247 %c3 = fadd double %a3, %b3 248 %r0 = insertelement <4 x double> undef, double %c0, i32 0 249 %r1 = insertelement <4 x double> %r0, double %c1, i32 1 250 %r2 = insertelement <4 x double> %r1, double %c2, i32 2 251 %r3 = insertelement <4 x double> %r2, double %c3, i32 3 252 ret <4 x double> %r3 253} 254 255define <4 x double> @buildvector_sub_4f64(<4 x double> %a, <4 x double> %b) { 256; CHECK-LABEL: @buildvector_sub_4f64( 257; CHECK-NEXT: [[TMP1:%.*]] = fsub <4 x double> %a, %b 258; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0 259; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0 260; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1 261; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1 262; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2 263; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2 264; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3 265; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3 266; CHECK-NEXT: ret <4 x double> [[R3]] 267; 268 %a0 = extractelement <4 x double> %a, i32 0 269 %a1 = extractelement <4 x double> %a, i32 1 270 %a2 = extractelement <4 x double> %a, i32 2 271 %a3 = extractelement <4 x double> %a, i32 3 272 %b0 = extractelement <4 x double> %b, i32 0 273 %b1 = extractelement <4 x double> %b, i32 1 274 %b2 = extractelement <4 x double> %b, i32 2 275 %b3 = extractelement <4 x double> %b, i32 3 276 %c0 = fsub double %a0, %b0 277 %c1 = fsub double %a1, %b1 278 %c2 = fsub double %a2, %b2 279 %c3 = fsub double %a3, %b3 280 %r0 = insertelement <4 x double> undef, double %c0, i32 0 281 %r1 = insertelement <4 x double> %r0, double %c1, i32 1 282 %r2 = insertelement <4 x double> %r1, double %c2, i32 2 283 %r3 = insertelement <4 x double> %r2, double %c3, i32 3 284 ret <4 x double> %r3 285} 286 287define <4 x double> @buildvector_mul_4f64(<4 x double> %a, <4 x double> %b) { 288; CHECK-LABEL: @buildvector_mul_4f64( 289; CHECK-NEXT: [[TMP1:%.*]] = fmul <4 x double> %a, %b 290; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0 291; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0 292; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1 293; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1 294; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2 295; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2 296; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3 297; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3 298; CHECK-NEXT: ret <4 x double> [[R3]] 299; 300 %a0 = extractelement <4 x double> %a, i32 0 301 %a1 = extractelement <4 x double> %a, i32 1 302 %a2 = extractelement <4 x double> %a, i32 2 303 %a3 = extractelement <4 x double> %a, i32 3 304 %b0 = extractelement <4 x double> %b, i32 0 305 %b1 = extractelement <4 x double> %b, i32 1 306 %b2 = extractelement <4 x double> %b, i32 2 307 %b3 = extractelement <4 x double> %b, i32 3 308 %c0 = fmul double %a0, %b0 309 %c1 = fmul double %a1, %b1 310 %c2 = fmul double %a2, %b2 311 %c3 = fmul double %a3, %b3 312 %r0 = insertelement <4 x double> undef, double %c0, i32 0 313 %r1 = insertelement <4 x double> %r0, double %c1, i32 1 314 %r2 = insertelement <4 x double> %r1, double %c2, i32 2 315 %r3 = insertelement <4 x double> %r2, double %c3, i32 3 316 ret <4 x double> %r3 317} 318 319define <4 x double> @buildvector_div_4f64(<4 x double> %a, <4 x double> %b) { 320; CHECK-LABEL: @buildvector_div_4f64( 321; CHECK-NEXT: [[TMP1:%.*]] = fdiv <4 x double> %a, %b 322; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0 323; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0 324; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1 325; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1 326; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2 327; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2 328; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3 329; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3 330; CHECK-NEXT: ret <4 x double> [[R3]] 331; 332 %a0 = extractelement <4 x double> %a, i32 0 333 %a1 = extractelement <4 x double> %a, i32 1 334 %a2 = extractelement <4 x double> %a, i32 2 335 %a3 = extractelement <4 x double> %a, i32 3 336 %b0 = extractelement <4 x double> %b, i32 0 337 %b1 = extractelement <4 x double> %b, i32 1 338 %b2 = extractelement <4 x double> %b, i32 2 339 %b3 = extractelement <4 x double> %b, i32 3 340 %c0 = fdiv double %a0, %b0 341 %c1 = fdiv double %a1, %b1 342 %c2 = fdiv double %a2, %b2 343 %c3 = fdiv double %a3, %b3 344 %r0 = insertelement <4 x double> undef, double %c0, i32 0 345 %r1 = insertelement <4 x double> %r0, double %c1, i32 1 346 %r2 = insertelement <4 x double> %r1, double %c2, i32 2 347 %r3 = insertelement <4 x double> %r2, double %c3, i32 3 348 ret <4 x double> %r3 349} 350 351define <8 x float> @buildvector_add_8f32(<8 x float> %a, <8 x float> %b) { 352; CHECK-LABEL: @buildvector_add_8f32( 353; CHECK-NEXT: [[TMP1:%.*]] = fadd <8 x float> %a, %b 354; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP1]], i32 0 355; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x float> undef, float [[TMP2]], i32 0 356; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP1]], i32 1 357; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x float> [[R0]], float [[TMP3]], i32 1 358; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x float> [[TMP1]], i32 2 359; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x float> [[R1]], float [[TMP4]], i32 2 360; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x float> [[TMP1]], i32 3 361; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x float> [[R2]], float [[TMP5]], i32 3 362; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x float> [[TMP1]], i32 4 363; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x float> [[R3]], float [[TMP6]], i32 4 364; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x float> [[TMP1]], i32 5 365; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x float> [[R4]], float [[TMP7]], i32 5 366; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x float> [[TMP1]], i32 6 367; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x float> [[R5]], float [[TMP8]], i32 6 368; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x float> [[TMP1]], i32 7 369; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x float> [[R6]], float [[TMP9]], i32 7 370; CHECK-NEXT: ret <8 x float> [[R7]] 371; 372 %a0 = extractelement <8 x float> %a, i32 0 373 %a1 = extractelement <8 x float> %a, i32 1 374 %a2 = extractelement <8 x float> %a, i32 2 375 %a3 = extractelement <8 x float> %a, i32 3 376 %a4 = extractelement <8 x float> %a, i32 4 377 %a5 = extractelement <8 x float> %a, i32 5 378 %a6 = extractelement <8 x float> %a, i32 6 379 %a7 = extractelement <8 x float> %a, i32 7 380 %b0 = extractelement <8 x float> %b, i32 0 381 %b1 = extractelement <8 x float> %b, i32 1 382 %b2 = extractelement <8 x float> %b, i32 2 383 %b3 = extractelement <8 x float> %b, i32 3 384 %b4 = extractelement <8 x float> %b, i32 4 385 %b5 = extractelement <8 x float> %b, i32 5 386 %b6 = extractelement <8 x float> %b, i32 6 387 %b7 = extractelement <8 x float> %b, i32 7 388 %c0 = fadd float %a0, %b0 389 %c1 = fadd float %a1, %b1 390 %c2 = fadd float %a2, %b2 391 %c3 = fadd float %a3, %b3 392 %c4 = fadd float %a4, %b4 393 %c5 = fadd float %a5, %b5 394 %c6 = fadd float %a6, %b6 395 %c7 = fadd float %a7, %b7 396 %r0 = insertelement <8 x float> undef, float %c0, i32 0 397 %r1 = insertelement <8 x float> %r0, float %c1, i32 1 398 %r2 = insertelement <8 x float> %r1, float %c2, i32 2 399 %r3 = insertelement <8 x float> %r2, float %c3, i32 3 400 %r4 = insertelement <8 x float> %r3, float %c4, i32 4 401 %r5 = insertelement <8 x float> %r4, float %c5, i32 5 402 %r6 = insertelement <8 x float> %r5, float %c6, i32 6 403 %r7 = insertelement <8 x float> %r6, float %c7, i32 7 404 ret <8 x float> %r7 405} 406 407define <8 x float> @buildvector_sub_8f32(<8 x float> %a, <8 x float> %b) { 408; CHECK-LABEL: @buildvector_sub_8f32( 409; CHECK-NEXT: [[TMP1:%.*]] = fsub <8 x float> %a, %b 410; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP1]], i32 0 411; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x float> undef, float [[TMP2]], i32 0 412; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP1]], i32 1 413; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x float> [[R0]], float [[TMP3]], i32 1 414; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x float> [[TMP1]], i32 2 415; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x float> [[R1]], float [[TMP4]], i32 2 416; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x float> [[TMP1]], i32 3 417; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x float> [[R2]], float [[TMP5]], i32 3 418; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x float> [[TMP1]], i32 4 419; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x float> [[R3]], float [[TMP6]], i32 4 420; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x float> [[TMP1]], i32 5 421; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x float> [[R4]], float [[TMP7]], i32 5 422; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x float> [[TMP1]], i32 6 423; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x float> [[R5]], float [[TMP8]], i32 6 424; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x float> [[TMP1]], i32 7 425; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x float> [[R6]], float [[TMP9]], i32 7 426; CHECK-NEXT: ret <8 x float> [[R7]] 427; 428 %a0 = extractelement <8 x float> %a, i32 0 429 %a1 = extractelement <8 x float> %a, i32 1 430 %a2 = extractelement <8 x float> %a, i32 2 431 %a3 = extractelement <8 x float> %a, i32 3 432 %a4 = extractelement <8 x float> %a, i32 4 433 %a5 = extractelement <8 x float> %a, i32 5 434 %a6 = extractelement <8 x float> %a, i32 6 435 %a7 = extractelement <8 x float> %a, i32 7 436 %b0 = extractelement <8 x float> %b, i32 0 437 %b1 = extractelement <8 x float> %b, i32 1 438 %b2 = extractelement <8 x float> %b, i32 2 439 %b3 = extractelement <8 x float> %b, i32 3 440 %b4 = extractelement <8 x float> %b, i32 4 441 %b5 = extractelement <8 x float> %b, i32 5 442 %b6 = extractelement <8 x float> %b, i32 6 443 %b7 = extractelement <8 x float> %b, i32 7 444 %c0 = fsub float %a0, %b0 445 %c1 = fsub float %a1, %b1 446 %c2 = fsub float %a2, %b2 447 %c3 = fsub float %a3, %b3 448 %c4 = fsub float %a4, %b4 449 %c5 = fsub float %a5, %b5 450 %c6 = fsub float %a6, %b6 451 %c7 = fsub float %a7, %b7 452 %r0 = insertelement <8 x float> undef, float %c0, i32 0 453 %r1 = insertelement <8 x float> %r0, float %c1, i32 1 454 %r2 = insertelement <8 x float> %r1, float %c2, i32 2 455 %r3 = insertelement <8 x float> %r2, float %c3, i32 3 456 %r4 = insertelement <8 x float> %r3, float %c4, i32 4 457 %r5 = insertelement <8 x float> %r4, float %c5, i32 5 458 %r6 = insertelement <8 x float> %r5, float %c6, i32 6 459 %r7 = insertelement <8 x float> %r6, float %c7, i32 7 460 ret <8 x float> %r7 461} 462 463define <8 x float> @buildvector_mul_8f32(<8 x float> %a, <8 x float> %b) { 464; CHECK-LABEL: @buildvector_mul_8f32( 465; CHECK-NEXT: [[TMP1:%.*]] = fmul <8 x float> %a, %b 466; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP1]], i32 0 467; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x float> undef, float [[TMP2]], i32 0 468; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP1]], i32 1 469; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x float> [[R0]], float [[TMP3]], i32 1 470; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x float> [[TMP1]], i32 2 471; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x float> [[R1]], float [[TMP4]], i32 2 472; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x float> [[TMP1]], i32 3 473; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x float> [[R2]], float [[TMP5]], i32 3 474; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x float> [[TMP1]], i32 4 475; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x float> [[R3]], float [[TMP6]], i32 4 476; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x float> [[TMP1]], i32 5 477; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x float> [[R4]], float [[TMP7]], i32 5 478; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x float> [[TMP1]], i32 6 479; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x float> [[R5]], float [[TMP8]], i32 6 480; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x float> [[TMP1]], i32 7 481; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x float> [[R6]], float [[TMP9]], i32 7 482; CHECK-NEXT: ret <8 x float> [[R7]] 483; 484 %a0 = extractelement <8 x float> %a, i32 0 485 %a1 = extractelement <8 x float> %a, i32 1 486 %a2 = extractelement <8 x float> %a, i32 2 487 %a3 = extractelement <8 x float> %a, i32 3 488 %a4 = extractelement <8 x float> %a, i32 4 489 %a5 = extractelement <8 x float> %a, i32 5 490 %a6 = extractelement <8 x float> %a, i32 6 491 %a7 = extractelement <8 x float> %a, i32 7 492 %b0 = extractelement <8 x float> %b, i32 0 493 %b1 = extractelement <8 x float> %b, i32 1 494 %b2 = extractelement <8 x float> %b, i32 2 495 %b3 = extractelement <8 x float> %b, i32 3 496 %b4 = extractelement <8 x float> %b, i32 4 497 %b5 = extractelement <8 x float> %b, i32 5 498 %b6 = extractelement <8 x float> %b, i32 6 499 %b7 = extractelement <8 x float> %b, i32 7 500 %c0 = fmul float %a0, %b0 501 %c1 = fmul float %a1, %b1 502 %c2 = fmul float %a2, %b2 503 %c3 = fmul float %a3, %b3 504 %c4 = fmul float %a4, %b4 505 %c5 = fmul float %a5, %b5 506 %c6 = fmul float %a6, %b6 507 %c7 = fmul float %a7, %b7 508 %r0 = insertelement <8 x float> undef, float %c0, i32 0 509 %r1 = insertelement <8 x float> %r0, float %c1, i32 1 510 %r2 = insertelement <8 x float> %r1, float %c2, i32 2 511 %r3 = insertelement <8 x float> %r2, float %c3, i32 3 512 %r4 = insertelement <8 x float> %r3, float %c4, i32 4 513 %r5 = insertelement <8 x float> %r4, float %c5, i32 5 514 %r6 = insertelement <8 x float> %r5, float %c6, i32 6 515 %r7 = insertelement <8 x float> %r6, float %c7, i32 7 516 ret <8 x float> %r7 517} 518 519define <8 x float> @buildvector_div_8f32(<8 x float> %a, <8 x float> %b) { 520; CHECK-LABEL: @buildvector_div_8f32( 521; CHECK-NEXT: [[TMP1:%.*]] = fdiv <8 x float> %a, %b 522; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP1]], i32 0 523; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x float> undef, float [[TMP2]], i32 0 524; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP1]], i32 1 525; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x float> [[R0]], float [[TMP3]], i32 1 526; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x float> [[TMP1]], i32 2 527; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x float> [[R1]], float [[TMP4]], i32 2 528; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x float> [[TMP1]], i32 3 529; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x float> [[R2]], float [[TMP5]], i32 3 530; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x float> [[TMP1]], i32 4 531; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x float> [[R3]], float [[TMP6]], i32 4 532; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x float> [[TMP1]], i32 5 533; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x float> [[R4]], float [[TMP7]], i32 5 534; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x float> [[TMP1]], i32 6 535; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x float> [[R5]], float [[TMP8]], i32 6 536; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x float> [[TMP1]], i32 7 537; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x float> [[R6]], float [[TMP9]], i32 7 538; CHECK-NEXT: ret <8 x float> [[R7]] 539; 540 %a0 = extractelement <8 x float> %a, i32 0 541 %a1 = extractelement <8 x float> %a, i32 1 542 %a2 = extractelement <8 x float> %a, i32 2 543 %a3 = extractelement <8 x float> %a, i32 3 544 %a4 = extractelement <8 x float> %a, i32 4 545 %a5 = extractelement <8 x float> %a, i32 5 546 %a6 = extractelement <8 x float> %a, i32 6 547 %a7 = extractelement <8 x float> %a, i32 7 548 %b0 = extractelement <8 x float> %b, i32 0 549 %b1 = extractelement <8 x float> %b, i32 1 550 %b2 = extractelement <8 x float> %b, i32 2 551 %b3 = extractelement <8 x float> %b, i32 3 552 %b4 = extractelement <8 x float> %b, i32 4 553 %b5 = extractelement <8 x float> %b, i32 5 554 %b6 = extractelement <8 x float> %b, i32 6 555 %b7 = extractelement <8 x float> %b, i32 7 556 %c0 = fdiv float %a0, %b0 557 %c1 = fdiv float %a1, %b1 558 %c2 = fdiv float %a2, %b2 559 %c3 = fdiv float %a3, %b3 560 %c4 = fdiv float %a4, %b4 561 %c5 = fdiv float %a5, %b5 562 %c6 = fdiv float %a6, %b6 563 %c7 = fdiv float %a7, %b7 564 %r0 = insertelement <8 x float> undef, float %c0, i32 0 565 %r1 = insertelement <8 x float> %r0, float %c1, i32 1 566 %r2 = insertelement <8 x float> %r1, float %c2, i32 2 567 %r3 = insertelement <8 x float> %r2, float %c3, i32 3 568 %r4 = insertelement <8 x float> %r3, float %c4, i32 4 569 %r5 = insertelement <8 x float> %r4, float %c5, i32 5 570 %r6 = insertelement <8 x float> %r5, float %c6, i32 6 571 %r7 = insertelement <8 x float> %r6, float %c7, i32 7 572 ret <8 x float> %r7 573} 574 575; 576; 512-bit Vectors 577; 578 579define <8 x double> @buildvector_add_8f64(<8 x double> %a, <8 x double> %b) { 580; CHECK-LABEL: @buildvector_add_8f64( 581; CHECK-NEXT: [[TMP1:%.*]] = fadd <8 x double> %a, %b 582; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0 583; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0 584; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1 585; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1 586; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2 587; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2 588; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3 589; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3 590; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4 591; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4 592; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5 593; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5 594; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6 595; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6 596; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7 597; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7 598; CHECK-NEXT: ret <8 x double> [[R7]] 599; 600 %a0 = extractelement <8 x double> %a, i32 0 601 %a1 = extractelement <8 x double> %a, i32 1 602 %a2 = extractelement <8 x double> %a, i32 2 603 %a3 = extractelement <8 x double> %a, i32 3 604 %a4 = extractelement <8 x double> %a, i32 4 605 %a5 = extractelement <8 x double> %a, i32 5 606 %a6 = extractelement <8 x double> %a, i32 6 607 %a7 = extractelement <8 x double> %a, i32 7 608 %b0 = extractelement <8 x double> %b, i32 0 609 %b1 = extractelement <8 x double> %b, i32 1 610 %b2 = extractelement <8 x double> %b, i32 2 611 %b3 = extractelement <8 x double> %b, i32 3 612 %b4 = extractelement <8 x double> %b, i32 4 613 %b5 = extractelement <8 x double> %b, i32 5 614 %b6 = extractelement <8 x double> %b, i32 6 615 %b7 = extractelement <8 x double> %b, i32 7 616 %c0 = fadd double %a0, %b0 617 %c1 = fadd double %a1, %b1 618 %c2 = fadd double %a2, %b2 619 %c3 = fadd double %a3, %b3 620 %c4 = fadd double %a4, %b4 621 %c5 = fadd double %a5, %b5 622 %c6 = fadd double %a6, %b6 623 %c7 = fadd double %a7, %b7 624 %r0 = insertelement <8 x double> undef, double %c0, i32 0 625 %r1 = insertelement <8 x double> %r0, double %c1, i32 1 626 %r2 = insertelement <8 x double> %r1, double %c2, i32 2 627 %r3 = insertelement <8 x double> %r2, double %c3, i32 3 628 %r4 = insertelement <8 x double> %r3, double %c4, i32 4 629 %r5 = insertelement <8 x double> %r4, double %c5, i32 5 630 %r6 = insertelement <8 x double> %r5, double %c6, i32 6 631 %r7 = insertelement <8 x double> %r6, double %c7, i32 7 632 ret <8 x double> %r7 633} 634 635define <8 x double> @buildvector_sub_8f64(<8 x double> %a, <8 x double> %b) { 636; CHECK-LABEL: @buildvector_sub_8f64( 637; CHECK-NEXT: [[TMP1:%.*]] = fsub <8 x double> %a, %b 638; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0 639; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0 640; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1 641; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1 642; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2 643; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2 644; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3 645; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3 646; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4 647; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4 648; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5 649; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5 650; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6 651; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6 652; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7 653; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7 654; CHECK-NEXT: ret <8 x double> [[R7]] 655; 656 %a0 = extractelement <8 x double> %a, i32 0 657 %a1 = extractelement <8 x double> %a, i32 1 658 %a2 = extractelement <8 x double> %a, i32 2 659 %a3 = extractelement <8 x double> %a, i32 3 660 %a4 = extractelement <8 x double> %a, i32 4 661 %a5 = extractelement <8 x double> %a, i32 5 662 %a6 = extractelement <8 x double> %a, i32 6 663 %a7 = extractelement <8 x double> %a, i32 7 664 %b0 = extractelement <8 x double> %b, i32 0 665 %b1 = extractelement <8 x double> %b, i32 1 666 %b2 = extractelement <8 x double> %b, i32 2 667 %b3 = extractelement <8 x double> %b, i32 3 668 %b4 = extractelement <8 x double> %b, i32 4 669 %b5 = extractelement <8 x double> %b, i32 5 670 %b6 = extractelement <8 x double> %b, i32 6 671 %b7 = extractelement <8 x double> %b, i32 7 672 %c0 = fsub double %a0, %b0 673 %c1 = fsub double %a1, %b1 674 %c2 = fsub double %a2, %b2 675 %c3 = fsub double %a3, %b3 676 %c4 = fsub double %a4, %b4 677 %c5 = fsub double %a5, %b5 678 %c6 = fsub double %a6, %b6 679 %c7 = fsub double %a7, %b7 680 %r0 = insertelement <8 x double> undef, double %c0, i32 0 681 %r1 = insertelement <8 x double> %r0, double %c1, i32 1 682 %r2 = insertelement <8 x double> %r1, double %c2, i32 2 683 %r3 = insertelement <8 x double> %r2, double %c3, i32 3 684 %r4 = insertelement <8 x double> %r3, double %c4, i32 4 685 %r5 = insertelement <8 x double> %r4, double %c5, i32 5 686 %r6 = insertelement <8 x double> %r5, double %c6, i32 6 687 %r7 = insertelement <8 x double> %r6, double %c7, i32 7 688 ret <8 x double> %r7 689} 690 691define <8 x double> @buildvector_mul_8f64(<8 x double> %a, <8 x double> %b) { 692; CHECK-LABEL: @buildvector_mul_8f64( 693; CHECK-NEXT: [[TMP1:%.*]] = fmul <8 x double> %a, %b 694; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0 695; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0 696; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1 697; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1 698; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2 699; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2 700; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3 701; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3 702; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4 703; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4 704; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5 705; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5 706; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6 707; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6 708; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7 709; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7 710; CHECK-NEXT: ret <8 x double> [[R7]] 711; 712 %a0 = extractelement <8 x double> %a, i32 0 713 %a1 = extractelement <8 x double> %a, i32 1 714 %a2 = extractelement <8 x double> %a, i32 2 715 %a3 = extractelement <8 x double> %a, i32 3 716 %a4 = extractelement <8 x double> %a, i32 4 717 %a5 = extractelement <8 x double> %a, i32 5 718 %a6 = extractelement <8 x double> %a, i32 6 719 %a7 = extractelement <8 x double> %a, i32 7 720 %b0 = extractelement <8 x double> %b, i32 0 721 %b1 = extractelement <8 x double> %b, i32 1 722 %b2 = extractelement <8 x double> %b, i32 2 723 %b3 = extractelement <8 x double> %b, i32 3 724 %b4 = extractelement <8 x double> %b, i32 4 725 %b5 = extractelement <8 x double> %b, i32 5 726 %b6 = extractelement <8 x double> %b, i32 6 727 %b7 = extractelement <8 x double> %b, i32 7 728 %c0 = fmul double %a0, %b0 729 %c1 = fmul double %a1, %b1 730 %c2 = fmul double %a2, %b2 731 %c3 = fmul double %a3, %b3 732 %c4 = fmul double %a4, %b4 733 %c5 = fmul double %a5, %b5 734 %c6 = fmul double %a6, %b6 735 %c7 = fmul double %a7, %b7 736 %r0 = insertelement <8 x double> undef, double %c0, i32 0 737 %r1 = insertelement <8 x double> %r0, double %c1, i32 1 738 %r2 = insertelement <8 x double> %r1, double %c2, i32 2 739 %r3 = insertelement <8 x double> %r2, double %c3, i32 3 740 %r4 = insertelement <8 x double> %r3, double %c4, i32 4 741 %r5 = insertelement <8 x double> %r4, double %c5, i32 5 742 %r6 = insertelement <8 x double> %r5, double %c6, i32 6 743 %r7 = insertelement <8 x double> %r6, double %c7, i32 7 744 ret <8 x double> %r7 745} 746 747define <8 x double> @buildvector_div_8f64(<8 x double> %a, <8 x double> %b) { 748; CHECK-LABEL: @buildvector_div_8f64( 749; CHECK-NEXT: [[TMP1:%.*]] = fdiv <8 x double> %a, %b 750; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0 751; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0 752; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1 753; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1 754; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2 755; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2 756; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3 757; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3 758; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4 759; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4 760; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5 761; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5 762; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6 763; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6 764; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7 765; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7 766; CHECK-NEXT: ret <8 x double> [[R7]] 767; 768 %a0 = extractelement <8 x double> %a, i32 0 769 %a1 = extractelement <8 x double> %a, i32 1 770 %a2 = extractelement <8 x double> %a, i32 2 771 %a3 = extractelement <8 x double> %a, i32 3 772 %a4 = extractelement <8 x double> %a, i32 4 773 %a5 = extractelement <8 x double> %a, i32 5 774 %a6 = extractelement <8 x double> %a, i32 6 775 %a7 = extractelement <8 x double> %a, i32 7 776 %b0 = extractelement <8 x double> %b, i32 0 777 %b1 = extractelement <8 x double> %b, i32 1 778 %b2 = extractelement <8 x double> %b, i32 2 779 %b3 = extractelement <8 x double> %b, i32 3 780 %b4 = extractelement <8 x double> %b, i32 4 781 %b5 = extractelement <8 x double> %b, i32 5 782 %b6 = extractelement <8 x double> %b, i32 6 783 %b7 = extractelement <8 x double> %b, i32 7 784 %c0 = fdiv double %a0, %b0 785 %c1 = fdiv double %a1, %b1 786 %c2 = fdiv double %a2, %b2 787 %c3 = fdiv double %a3, %b3 788 %c4 = fdiv double %a4, %b4 789 %c5 = fdiv double %a5, %b5 790 %c6 = fdiv double %a6, %b6 791 %c7 = fdiv double %a7, %b7 792 %r0 = insertelement <8 x double> undef, double %c0, i32 0 793 %r1 = insertelement <8 x double> %r0, double %c1, i32 1 794 %r2 = insertelement <8 x double> %r1, double %c2, i32 2 795 %r3 = insertelement <8 x double> %r2, double %c3, i32 3 796 %r4 = insertelement <8 x double> %r3, double %c4, i32 4 797 %r5 = insertelement <8 x double> %r4, double %c5, i32 5 798 %r6 = insertelement <8 x double> %r5, double %c6, i32 6 799 %r7 = insertelement <8 x double> %r6, double %c7, i32 7 800 ret <8 x double> %r7 801} 802 803define <16 x float> @buildvector_add_16f32(<16 x float> %a, <16 x float> %b) { 804; CHECK-LABEL: @buildvector_add_16f32( 805; CHECK-NEXT: [[TMP1:%.*]] = fadd <16 x float> %a, %b 806; CHECK-NEXT: [[TMP2:%.*]] = extractelement <16 x float> [[TMP1]], i32 0 807; CHECK-NEXT: [[R0:%.*]] = insertelement <16 x float> undef, float [[TMP2]], i32 0 808; CHECK-NEXT: [[TMP3:%.*]] = extractelement <16 x float> [[TMP1]], i32 1 809; CHECK-NEXT: [[R1:%.*]] = insertelement <16 x float> [[R0]], float [[TMP3]], i32 1 810; CHECK-NEXT: [[TMP4:%.*]] = extractelement <16 x float> [[TMP1]], i32 2 811; CHECK-NEXT: [[R2:%.*]] = insertelement <16 x float> [[R1]], float [[TMP4]], i32 2 812; CHECK-NEXT: [[TMP5:%.*]] = extractelement <16 x float> [[TMP1]], i32 3 813; CHECK-NEXT: [[R3:%.*]] = insertelement <16 x float> [[R2]], float [[TMP5]], i32 3 814; CHECK-NEXT: [[TMP6:%.*]] = extractelement <16 x float> [[TMP1]], i32 4 815; CHECK-NEXT: [[R4:%.*]] = insertelement <16 x float> [[R3]], float [[TMP6]], i32 4 816; CHECK-NEXT: [[TMP7:%.*]] = extractelement <16 x float> [[TMP1]], i32 5 817; CHECK-NEXT: [[R5:%.*]] = insertelement <16 x float> [[R4]], float [[TMP7]], i32 5 818; CHECK-NEXT: [[TMP8:%.*]] = extractelement <16 x float> [[TMP1]], i32 6 819; CHECK-NEXT: [[R6:%.*]] = insertelement <16 x float> [[R5]], float [[TMP8]], i32 6 820; CHECK-NEXT: [[TMP9:%.*]] = extractelement <16 x float> [[TMP1]], i32 7 821; CHECK-NEXT: [[R7:%.*]] = insertelement <16 x float> [[R6]], float [[TMP9]], i32 7 822; CHECK-NEXT: [[TMP10:%.*]] = extractelement <16 x float> [[TMP1]], i32 8 823; CHECK-NEXT: [[R8:%.*]] = insertelement <16 x float> [[R7]], float [[TMP10]], i32 8 824; CHECK-NEXT: [[TMP11:%.*]] = extractelement <16 x float> [[TMP1]], i32 9 825; CHECK-NEXT: [[R9:%.*]] = insertelement <16 x float> [[R8]], float [[TMP11]], i32 9 826; CHECK-NEXT: [[TMP12:%.*]] = extractelement <16 x float> [[TMP1]], i32 10 827; CHECK-NEXT: [[R10:%.*]] = insertelement <16 x float> [[R9]], float [[TMP12]], i32 10 828; CHECK-NEXT: [[TMP13:%.*]] = extractelement <16 x float> [[TMP1]], i32 11 829; CHECK-NEXT: [[R11:%.*]] = insertelement <16 x float> [[R10]], float [[TMP13]], i32 11 830; CHECK-NEXT: [[TMP14:%.*]] = extractelement <16 x float> [[TMP1]], i32 12 831; CHECK-NEXT: [[R12:%.*]] = insertelement <16 x float> [[R11]], float [[TMP14]], i32 12 832; CHECK-NEXT: [[TMP15:%.*]] = extractelement <16 x float> [[TMP1]], i32 13 833; CHECK-NEXT: [[R13:%.*]] = insertelement <16 x float> [[R12]], float [[TMP15]], i32 13 834; CHECK-NEXT: [[TMP16:%.*]] = extractelement <16 x float> [[TMP1]], i32 14 835; CHECK-NEXT: [[R14:%.*]] = insertelement <16 x float> [[R13]], float [[TMP16]], i32 14 836; CHECK-NEXT: [[TMP17:%.*]] = extractelement <16 x float> [[TMP1]], i32 15 837; CHECK-NEXT: [[R15:%.*]] = insertelement <16 x float> [[R14]], float [[TMP17]], i32 15 838; CHECK-NEXT: ret <16 x float> [[R15]] 839; 840 %a0 = extractelement <16 x float> %a, i32 0 841 %a1 = extractelement <16 x float> %a, i32 1 842 %a2 = extractelement <16 x float> %a, i32 2 843 %a3 = extractelement <16 x float> %a, i32 3 844 %a4 = extractelement <16 x float> %a, i32 4 845 %a5 = extractelement <16 x float> %a, i32 5 846 %a6 = extractelement <16 x float> %a, i32 6 847 %a7 = extractelement <16 x float> %a, i32 7 848 %a8 = extractelement <16 x float> %a, i32 8 849 %a9 = extractelement <16 x float> %a, i32 9 850 %a10 = extractelement <16 x float> %a, i32 10 851 %a11 = extractelement <16 x float> %a, i32 11 852 %a12 = extractelement <16 x float> %a, i32 12 853 %a13 = extractelement <16 x float> %a, i32 13 854 %a14 = extractelement <16 x float> %a, i32 14 855 %a15 = extractelement <16 x float> %a, i32 15 856 %b0 = extractelement <16 x float> %b, i32 0 857 %b1 = extractelement <16 x float> %b, i32 1 858 %b2 = extractelement <16 x float> %b, i32 2 859 %b3 = extractelement <16 x float> %b, i32 3 860 %b4 = extractelement <16 x float> %b, i32 4 861 %b5 = extractelement <16 x float> %b, i32 5 862 %b6 = extractelement <16 x float> %b, i32 6 863 %b7 = extractelement <16 x float> %b, i32 7 864 %b8 = extractelement <16 x float> %b, i32 8 865 %b9 = extractelement <16 x float> %b, i32 9 866 %b10 = extractelement <16 x float> %b, i32 10 867 %b11 = extractelement <16 x float> %b, i32 11 868 %b12 = extractelement <16 x float> %b, i32 12 869 %b13 = extractelement <16 x float> %b, i32 13 870 %b14 = extractelement <16 x float> %b, i32 14 871 %b15 = extractelement <16 x float> %b, i32 15 872 %c0 = fadd float %a0 , %b0 873 %c1 = fadd float %a1 , %b1 874 %c2 = fadd float %a2 , %b2 875 %c3 = fadd float %a3 , %b3 876 %c4 = fadd float %a4 , %b4 877 %c5 = fadd float %a5 , %b5 878 %c6 = fadd float %a6 , %b6 879 %c7 = fadd float %a7 , %b7 880 %c8 = fadd float %a8 , %b8 881 %c9 = fadd float %a9 , %b9 882 %c10 = fadd float %a10, %b10 883 %c11 = fadd float %a11, %b11 884 %c12 = fadd float %a12, %b12 885 %c13 = fadd float %a13, %b13 886 %c14 = fadd float %a14, %b14 887 %c15 = fadd float %a15, %b15 888 %r0 = insertelement <16 x float> undef, float %c0 , i32 0 889 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1 890 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2 891 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3 892 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4 893 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5 894 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6 895 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7 896 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8 897 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9 898 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10 899 %r11 = insertelement <16 x float> %r10, float %c11, i32 11 900 %r12 = insertelement <16 x float> %r11, float %c12, i32 12 901 %r13 = insertelement <16 x float> %r12, float %c13, i32 13 902 %r14 = insertelement <16 x float> %r13, float %c14, i32 14 903 %r15 = insertelement <16 x float> %r14, float %c15, i32 15 904 ret <16 x float> %r15 905} 906 907define <16 x float> @buildvector_sub_16f32(<16 x float> %a, <16 x float> %b) { 908; CHECK-LABEL: @buildvector_sub_16f32( 909; CHECK-NEXT: [[TMP1:%.*]] = fsub <16 x float> %a, %b 910; CHECK-NEXT: [[TMP2:%.*]] = extractelement <16 x float> [[TMP1]], i32 0 911; CHECK-NEXT: [[R0:%.*]] = insertelement <16 x float> undef, float [[TMP2]], i32 0 912; CHECK-NEXT: [[TMP3:%.*]] = extractelement <16 x float> [[TMP1]], i32 1 913; CHECK-NEXT: [[R1:%.*]] = insertelement <16 x float> [[R0]], float [[TMP3]], i32 1 914; CHECK-NEXT: [[TMP4:%.*]] = extractelement <16 x float> [[TMP1]], i32 2 915; CHECK-NEXT: [[R2:%.*]] = insertelement <16 x float> [[R1]], float [[TMP4]], i32 2 916; CHECK-NEXT: [[TMP5:%.*]] = extractelement <16 x float> [[TMP1]], i32 3 917; CHECK-NEXT: [[R3:%.*]] = insertelement <16 x float> [[R2]], float [[TMP5]], i32 3 918; CHECK-NEXT: [[TMP6:%.*]] = extractelement <16 x float> [[TMP1]], i32 4 919; CHECK-NEXT: [[R4:%.*]] = insertelement <16 x float> [[R3]], float [[TMP6]], i32 4 920; CHECK-NEXT: [[TMP7:%.*]] = extractelement <16 x float> [[TMP1]], i32 5 921; CHECK-NEXT: [[R5:%.*]] = insertelement <16 x float> [[R4]], float [[TMP7]], i32 5 922; CHECK-NEXT: [[TMP8:%.*]] = extractelement <16 x float> [[TMP1]], i32 6 923; CHECK-NEXT: [[R6:%.*]] = insertelement <16 x float> [[R5]], float [[TMP8]], i32 6 924; CHECK-NEXT: [[TMP9:%.*]] = extractelement <16 x float> [[TMP1]], i32 7 925; CHECK-NEXT: [[R7:%.*]] = insertelement <16 x float> [[R6]], float [[TMP9]], i32 7 926; CHECK-NEXT: [[TMP10:%.*]] = extractelement <16 x float> [[TMP1]], i32 8 927; CHECK-NEXT: [[R8:%.*]] = insertelement <16 x float> [[R7]], float [[TMP10]], i32 8 928; CHECK-NEXT: [[TMP11:%.*]] = extractelement <16 x float> [[TMP1]], i32 9 929; CHECK-NEXT: [[R9:%.*]] = insertelement <16 x float> [[R8]], float [[TMP11]], i32 9 930; CHECK-NEXT: [[TMP12:%.*]] = extractelement <16 x float> [[TMP1]], i32 10 931; CHECK-NEXT: [[R10:%.*]] = insertelement <16 x float> [[R9]], float [[TMP12]], i32 10 932; CHECK-NEXT: [[TMP13:%.*]] = extractelement <16 x float> [[TMP1]], i32 11 933; CHECK-NEXT: [[R11:%.*]] = insertelement <16 x float> [[R10]], float [[TMP13]], i32 11 934; CHECK-NEXT: [[TMP14:%.*]] = extractelement <16 x float> [[TMP1]], i32 12 935; CHECK-NEXT: [[R12:%.*]] = insertelement <16 x float> [[R11]], float [[TMP14]], i32 12 936; CHECK-NEXT: [[TMP15:%.*]] = extractelement <16 x float> [[TMP1]], i32 13 937; CHECK-NEXT: [[R13:%.*]] = insertelement <16 x float> [[R12]], float [[TMP15]], i32 13 938; CHECK-NEXT: [[TMP16:%.*]] = extractelement <16 x float> [[TMP1]], i32 14 939; CHECK-NEXT: [[R14:%.*]] = insertelement <16 x float> [[R13]], float [[TMP16]], i32 14 940; CHECK-NEXT: [[TMP17:%.*]] = extractelement <16 x float> [[TMP1]], i32 15 941; CHECK-NEXT: [[R15:%.*]] = insertelement <16 x float> [[R14]], float [[TMP17]], i32 15 942; CHECK-NEXT: ret <16 x float> [[R15]] 943; 944 %a0 = extractelement <16 x float> %a, i32 0 945 %a1 = extractelement <16 x float> %a, i32 1 946 %a2 = extractelement <16 x float> %a, i32 2 947 %a3 = extractelement <16 x float> %a, i32 3 948 %a4 = extractelement <16 x float> %a, i32 4 949 %a5 = extractelement <16 x float> %a, i32 5 950 %a6 = extractelement <16 x float> %a, i32 6 951 %a7 = extractelement <16 x float> %a, i32 7 952 %a8 = extractelement <16 x float> %a, i32 8 953 %a9 = extractelement <16 x float> %a, i32 9 954 %a10 = extractelement <16 x float> %a, i32 10 955 %a11 = extractelement <16 x float> %a, i32 11 956 %a12 = extractelement <16 x float> %a, i32 12 957 %a13 = extractelement <16 x float> %a, i32 13 958 %a14 = extractelement <16 x float> %a, i32 14 959 %a15 = extractelement <16 x float> %a, i32 15 960 %b0 = extractelement <16 x float> %b, i32 0 961 %b1 = extractelement <16 x float> %b, i32 1 962 %b2 = extractelement <16 x float> %b, i32 2 963 %b3 = extractelement <16 x float> %b, i32 3 964 %b4 = extractelement <16 x float> %b, i32 4 965 %b5 = extractelement <16 x float> %b, i32 5 966 %b6 = extractelement <16 x float> %b, i32 6 967 %b7 = extractelement <16 x float> %b, i32 7 968 %b8 = extractelement <16 x float> %b, i32 8 969 %b9 = extractelement <16 x float> %b, i32 9 970 %b10 = extractelement <16 x float> %b, i32 10 971 %b11 = extractelement <16 x float> %b, i32 11 972 %b12 = extractelement <16 x float> %b, i32 12 973 %b13 = extractelement <16 x float> %b, i32 13 974 %b14 = extractelement <16 x float> %b, i32 14 975 %b15 = extractelement <16 x float> %b, i32 15 976 %c0 = fsub float %a0 , %b0 977 %c1 = fsub float %a1 , %b1 978 %c2 = fsub float %a2 , %b2 979 %c3 = fsub float %a3 , %b3 980 %c4 = fsub float %a4 , %b4 981 %c5 = fsub float %a5 , %b5 982 %c6 = fsub float %a6 , %b6 983 %c7 = fsub float %a7 , %b7 984 %c8 = fsub float %a8 , %b8 985 %c9 = fsub float %a9 , %b9 986 %c10 = fsub float %a10, %b10 987 %c11 = fsub float %a11, %b11 988 %c12 = fsub float %a12, %b12 989 %c13 = fsub float %a13, %b13 990 %c14 = fsub float %a14, %b14 991 %c15 = fsub float %a15, %b15 992 %r0 = insertelement <16 x float> undef, float %c0 , i32 0 993 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1 994 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2 995 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3 996 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4 997 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5 998 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6 999 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7 1000 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8 1001 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9 1002 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10 1003 %r11 = insertelement <16 x float> %r10, float %c11, i32 11 1004 %r12 = insertelement <16 x float> %r11, float %c12, i32 12 1005 %r13 = insertelement <16 x float> %r12, float %c13, i32 13 1006 %r14 = insertelement <16 x float> %r13, float %c14, i32 14 1007 %r15 = insertelement <16 x float> %r14, float %c15, i32 15 1008 ret <16 x float> %r15 1009} 1010 1011define <16 x float> @buildvector_mul_16f32(<16 x float> %a, <16 x float> %b) { 1012; CHECK-LABEL: @buildvector_mul_16f32( 1013; CHECK-NEXT: [[TMP1:%.*]] = fmul <16 x float> %a, %b 1014; CHECK-NEXT: [[TMP2:%.*]] = extractelement <16 x float> [[TMP1]], i32 0 1015; CHECK-NEXT: [[R0:%.*]] = insertelement <16 x float> undef, float [[TMP2]], i32 0 1016; CHECK-NEXT: [[TMP3:%.*]] = extractelement <16 x float> [[TMP1]], i32 1 1017; CHECK-NEXT: [[R1:%.*]] = insertelement <16 x float> [[R0]], float [[TMP3]], i32 1 1018; CHECK-NEXT: [[TMP4:%.*]] = extractelement <16 x float> [[TMP1]], i32 2 1019; CHECK-NEXT: [[R2:%.*]] = insertelement <16 x float> [[R1]], float [[TMP4]], i32 2 1020; CHECK-NEXT: [[TMP5:%.*]] = extractelement <16 x float> [[TMP1]], i32 3 1021; CHECK-NEXT: [[R3:%.*]] = insertelement <16 x float> [[R2]], float [[TMP5]], i32 3 1022; CHECK-NEXT: [[TMP6:%.*]] = extractelement <16 x float> [[TMP1]], i32 4 1023; CHECK-NEXT: [[R4:%.*]] = insertelement <16 x float> [[R3]], float [[TMP6]], i32 4 1024; CHECK-NEXT: [[TMP7:%.*]] = extractelement <16 x float> [[TMP1]], i32 5 1025; CHECK-NEXT: [[R5:%.*]] = insertelement <16 x float> [[R4]], float [[TMP7]], i32 5 1026; CHECK-NEXT: [[TMP8:%.*]] = extractelement <16 x float> [[TMP1]], i32 6 1027; CHECK-NEXT: [[R6:%.*]] = insertelement <16 x float> [[R5]], float [[TMP8]], i32 6 1028; CHECK-NEXT: [[TMP9:%.*]] = extractelement <16 x float> [[TMP1]], i32 7 1029; CHECK-NEXT: [[R7:%.*]] = insertelement <16 x float> [[R6]], float [[TMP9]], i32 7 1030; CHECK-NEXT: [[TMP10:%.*]] = extractelement <16 x float> [[TMP1]], i32 8 1031; CHECK-NEXT: [[R8:%.*]] = insertelement <16 x float> [[R7]], float [[TMP10]], i32 8 1032; CHECK-NEXT: [[TMP11:%.*]] = extractelement <16 x float> [[TMP1]], i32 9 1033; CHECK-NEXT: [[R9:%.*]] = insertelement <16 x float> [[R8]], float [[TMP11]], i32 9 1034; CHECK-NEXT: [[TMP12:%.*]] = extractelement <16 x float> [[TMP1]], i32 10 1035; CHECK-NEXT: [[R10:%.*]] = insertelement <16 x float> [[R9]], float [[TMP12]], i32 10 1036; CHECK-NEXT: [[TMP13:%.*]] = extractelement <16 x float> [[TMP1]], i32 11 1037; CHECK-NEXT: [[R11:%.*]] = insertelement <16 x float> [[R10]], float [[TMP13]], i32 11 1038; CHECK-NEXT: [[TMP14:%.*]] = extractelement <16 x float> [[TMP1]], i32 12 1039; CHECK-NEXT: [[R12:%.*]] = insertelement <16 x float> [[R11]], float [[TMP14]], i32 12 1040; CHECK-NEXT: [[TMP15:%.*]] = extractelement <16 x float> [[TMP1]], i32 13 1041; CHECK-NEXT: [[R13:%.*]] = insertelement <16 x float> [[R12]], float [[TMP15]], i32 13 1042; CHECK-NEXT: [[TMP16:%.*]] = extractelement <16 x float> [[TMP1]], i32 14 1043; CHECK-NEXT: [[R14:%.*]] = insertelement <16 x float> [[R13]], float [[TMP16]], i32 14 1044; CHECK-NEXT: [[TMP17:%.*]] = extractelement <16 x float> [[TMP1]], i32 15 1045; CHECK-NEXT: [[R15:%.*]] = insertelement <16 x float> [[R14]], float [[TMP17]], i32 15 1046; CHECK-NEXT: ret <16 x float> [[R15]] 1047; 1048 %a0 = extractelement <16 x float> %a, i32 0 1049 %a1 = extractelement <16 x float> %a, i32 1 1050 %a2 = extractelement <16 x float> %a, i32 2 1051 %a3 = extractelement <16 x float> %a, i32 3 1052 %a4 = extractelement <16 x float> %a, i32 4 1053 %a5 = extractelement <16 x float> %a, i32 5 1054 %a6 = extractelement <16 x float> %a, i32 6 1055 %a7 = extractelement <16 x float> %a, i32 7 1056 %a8 = extractelement <16 x float> %a, i32 8 1057 %a9 = extractelement <16 x float> %a, i32 9 1058 %a10 = extractelement <16 x float> %a, i32 10 1059 %a11 = extractelement <16 x float> %a, i32 11 1060 %a12 = extractelement <16 x float> %a, i32 12 1061 %a13 = extractelement <16 x float> %a, i32 13 1062 %a14 = extractelement <16 x float> %a, i32 14 1063 %a15 = extractelement <16 x float> %a, i32 15 1064 %b0 = extractelement <16 x float> %b, i32 0 1065 %b1 = extractelement <16 x float> %b, i32 1 1066 %b2 = extractelement <16 x float> %b, i32 2 1067 %b3 = extractelement <16 x float> %b, i32 3 1068 %b4 = extractelement <16 x float> %b, i32 4 1069 %b5 = extractelement <16 x float> %b, i32 5 1070 %b6 = extractelement <16 x float> %b, i32 6 1071 %b7 = extractelement <16 x float> %b, i32 7 1072 %b8 = extractelement <16 x float> %b, i32 8 1073 %b9 = extractelement <16 x float> %b, i32 9 1074 %b10 = extractelement <16 x float> %b, i32 10 1075 %b11 = extractelement <16 x float> %b, i32 11 1076 %b12 = extractelement <16 x float> %b, i32 12 1077 %b13 = extractelement <16 x float> %b, i32 13 1078 %b14 = extractelement <16 x float> %b, i32 14 1079 %b15 = extractelement <16 x float> %b, i32 15 1080 %c0 = fmul float %a0 , %b0 1081 %c1 = fmul float %a1 , %b1 1082 %c2 = fmul float %a2 , %b2 1083 %c3 = fmul float %a3 , %b3 1084 %c4 = fmul float %a4 , %b4 1085 %c5 = fmul float %a5 , %b5 1086 %c6 = fmul float %a6 , %b6 1087 %c7 = fmul float %a7 , %b7 1088 %c8 = fmul float %a8 , %b8 1089 %c9 = fmul float %a9 , %b9 1090 %c10 = fmul float %a10, %b10 1091 %c11 = fmul float %a11, %b11 1092 %c12 = fmul float %a12, %b12 1093 %c13 = fmul float %a13, %b13 1094 %c14 = fmul float %a14, %b14 1095 %c15 = fmul float %a15, %b15 1096 %r0 = insertelement <16 x float> undef, float %c0 , i32 0 1097 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1 1098 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2 1099 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3 1100 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4 1101 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5 1102 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6 1103 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7 1104 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8 1105 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9 1106 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10 1107 %r11 = insertelement <16 x float> %r10, float %c11, i32 11 1108 %r12 = insertelement <16 x float> %r11, float %c12, i32 12 1109 %r13 = insertelement <16 x float> %r12, float %c13, i32 13 1110 %r14 = insertelement <16 x float> %r13, float %c14, i32 14 1111 %r15 = insertelement <16 x float> %r14, float %c15, i32 15 1112 ret <16 x float> %r15 1113} 1114 1115define <16 x float> @buildvector_div_16f32(<16 x float> %a, <16 x float> %b) { 1116; CHECK-LABEL: @buildvector_div_16f32( 1117; CHECK-NEXT: [[TMP1:%.*]] = fdiv <16 x float> %a, %b 1118; CHECK-NEXT: [[TMP2:%.*]] = extractelement <16 x float> [[TMP1]], i32 0 1119; CHECK-NEXT: [[R0:%.*]] = insertelement <16 x float> undef, float [[TMP2]], i32 0 1120; CHECK-NEXT: [[TMP3:%.*]] = extractelement <16 x float> [[TMP1]], i32 1 1121; CHECK-NEXT: [[R1:%.*]] = insertelement <16 x float> [[R0]], float [[TMP3]], i32 1 1122; CHECK-NEXT: [[TMP4:%.*]] = extractelement <16 x float> [[TMP1]], i32 2 1123; CHECK-NEXT: [[R2:%.*]] = insertelement <16 x float> [[R1]], float [[TMP4]], i32 2 1124; CHECK-NEXT: [[TMP5:%.*]] = extractelement <16 x float> [[TMP1]], i32 3 1125; CHECK-NEXT: [[R3:%.*]] = insertelement <16 x float> [[R2]], float [[TMP5]], i32 3 1126; CHECK-NEXT: [[TMP6:%.*]] = extractelement <16 x float> [[TMP1]], i32 4 1127; CHECK-NEXT: [[R4:%.*]] = insertelement <16 x float> [[R3]], float [[TMP6]], i32 4 1128; CHECK-NEXT: [[TMP7:%.*]] = extractelement <16 x float> [[TMP1]], i32 5 1129; CHECK-NEXT: [[R5:%.*]] = insertelement <16 x float> [[R4]], float [[TMP7]], i32 5 1130; CHECK-NEXT: [[TMP8:%.*]] = extractelement <16 x float> [[TMP1]], i32 6 1131; CHECK-NEXT: [[R6:%.*]] = insertelement <16 x float> [[R5]], float [[TMP8]], i32 6 1132; CHECK-NEXT: [[TMP9:%.*]] = extractelement <16 x float> [[TMP1]], i32 7 1133; CHECK-NEXT: [[R7:%.*]] = insertelement <16 x float> [[R6]], float [[TMP9]], i32 7 1134; CHECK-NEXT: [[TMP10:%.*]] = extractelement <16 x float> [[TMP1]], i32 8 1135; CHECK-NEXT: [[R8:%.*]] = insertelement <16 x float> [[R7]], float [[TMP10]], i32 8 1136; CHECK-NEXT: [[TMP11:%.*]] = extractelement <16 x float> [[TMP1]], i32 9 1137; CHECK-NEXT: [[R9:%.*]] = insertelement <16 x float> [[R8]], float [[TMP11]], i32 9 1138; CHECK-NEXT: [[TMP12:%.*]] = extractelement <16 x float> [[TMP1]], i32 10 1139; CHECK-NEXT: [[R10:%.*]] = insertelement <16 x float> [[R9]], float [[TMP12]], i32 10 1140; CHECK-NEXT: [[TMP13:%.*]] = extractelement <16 x float> [[TMP1]], i32 11 1141; CHECK-NEXT: [[R11:%.*]] = insertelement <16 x float> [[R10]], float [[TMP13]], i32 11 1142; CHECK-NEXT: [[TMP14:%.*]] = extractelement <16 x float> [[TMP1]], i32 12 1143; CHECK-NEXT: [[R12:%.*]] = insertelement <16 x float> [[R11]], float [[TMP14]], i32 12 1144; CHECK-NEXT: [[TMP15:%.*]] = extractelement <16 x float> [[TMP1]], i32 13 1145; CHECK-NEXT: [[R13:%.*]] = insertelement <16 x float> [[R12]], float [[TMP15]], i32 13 1146; CHECK-NEXT: [[TMP16:%.*]] = extractelement <16 x float> [[TMP1]], i32 14 1147; CHECK-NEXT: [[R14:%.*]] = insertelement <16 x float> [[R13]], float [[TMP16]], i32 14 1148; CHECK-NEXT: [[TMP17:%.*]] = extractelement <16 x float> [[TMP1]], i32 15 1149; CHECK-NEXT: [[R15:%.*]] = insertelement <16 x float> [[R14]], float [[TMP17]], i32 15 1150; CHECK-NEXT: ret <16 x float> [[R15]] 1151; 1152 %a0 = extractelement <16 x float> %a, i32 0 1153 %a1 = extractelement <16 x float> %a, i32 1 1154 %a2 = extractelement <16 x float> %a, i32 2 1155 %a3 = extractelement <16 x float> %a, i32 3 1156 %a4 = extractelement <16 x float> %a, i32 4 1157 %a5 = extractelement <16 x float> %a, i32 5 1158 %a6 = extractelement <16 x float> %a, i32 6 1159 %a7 = extractelement <16 x float> %a, i32 7 1160 %a8 = extractelement <16 x float> %a, i32 8 1161 %a9 = extractelement <16 x float> %a, i32 9 1162 %a10 = extractelement <16 x float> %a, i32 10 1163 %a11 = extractelement <16 x float> %a, i32 11 1164 %a12 = extractelement <16 x float> %a, i32 12 1165 %a13 = extractelement <16 x float> %a, i32 13 1166 %a14 = extractelement <16 x float> %a, i32 14 1167 %a15 = extractelement <16 x float> %a, i32 15 1168 %b0 = extractelement <16 x float> %b, i32 0 1169 %b1 = extractelement <16 x float> %b, i32 1 1170 %b2 = extractelement <16 x float> %b, i32 2 1171 %b3 = extractelement <16 x float> %b, i32 3 1172 %b4 = extractelement <16 x float> %b, i32 4 1173 %b5 = extractelement <16 x float> %b, i32 5 1174 %b6 = extractelement <16 x float> %b, i32 6 1175 %b7 = extractelement <16 x float> %b, i32 7 1176 %b8 = extractelement <16 x float> %b, i32 8 1177 %b9 = extractelement <16 x float> %b, i32 9 1178 %b10 = extractelement <16 x float> %b, i32 10 1179 %b11 = extractelement <16 x float> %b, i32 11 1180 %b12 = extractelement <16 x float> %b, i32 12 1181 %b13 = extractelement <16 x float> %b, i32 13 1182 %b14 = extractelement <16 x float> %b, i32 14 1183 %b15 = extractelement <16 x float> %b, i32 15 1184 %c0 = fdiv float %a0 , %b0 1185 %c1 = fdiv float %a1 , %b1 1186 %c2 = fdiv float %a2 , %b2 1187 %c3 = fdiv float %a3 , %b3 1188 %c4 = fdiv float %a4 , %b4 1189 %c5 = fdiv float %a5 , %b5 1190 %c6 = fdiv float %a6 , %b6 1191 %c7 = fdiv float %a7 , %b7 1192 %c8 = fdiv float %a8 , %b8 1193 %c9 = fdiv float %a9 , %b9 1194 %c10 = fdiv float %a10, %b10 1195 %c11 = fdiv float %a11, %b11 1196 %c12 = fdiv float %a12, %b12 1197 %c13 = fdiv float %a13, %b13 1198 %c14 = fdiv float %a14, %b14 1199 %c15 = fdiv float %a15, %b15 1200 %r0 = insertelement <16 x float> undef, float %c0 , i32 0 1201 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1 1202 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2 1203 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3 1204 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4 1205 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5 1206 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6 1207 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7 1208 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8 1209 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9 1210 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10 1211 %r11 = insertelement <16 x float> %r10, float %c11, i32 11 1212 %r12 = insertelement <16 x float> %r11, float %c12, i32 12 1213 %r13 = insertelement <16 x float> %r12, float %c13, i32 13 1214 %r14 = insertelement <16 x float> %r13, float %c14, i32 14 1215 %r15 = insertelement <16 x float> %r14, float %c15, i32 15 1216 ret <16 x float> %r15 1217} 1218