brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.7 KiB · 25652e0 Raw
412 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefix=SSE3; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer -S | FileCheck %s --check-prefix=SLM4; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -mattr=-prefer-128-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX5; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -mattr=+prefer-128-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefix=SSE6; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -mattr=-prefer-128-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX7; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -mattr=+prefer-128-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefix=SSE8; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=knl -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX5129; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -mattr=-prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX51210; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -mattr=+prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX11 12@a64 = common global [8 x i64] zeroinitializer, align 6413@b64 = common global [8 x i64] zeroinitializer, align 6414@c64 = common global [8 x i64] zeroinitializer, align 6415@a32 = common global [16 x i32] zeroinitializer, align 6416@b32 = common global [16 x i32] zeroinitializer, align 6417@c32 = common global [16 x i32] zeroinitializer, align 6418@a16 = common global [32 x i16] zeroinitializer, align 6419@b16 = common global [32 x i16] zeroinitializer, align 6420@c16 = common global [32 x i16] zeroinitializer, align 6421@a8  = common global [64 x i8] zeroinitializer, align 6422@b8  = common global [64 x i8] zeroinitializer, align 6423@c8  = common global [64 x i8] zeroinitializer, align 6424 25define void @sdiv_v16i32_uniformconst() {26; SSE-LABEL: @sdiv_v16i32_uniformconst(27; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 428; SSE-NEXT:    [[TMP2:%.*]] = sdiv <4 x i32> [[TMP1]], splat (i32 5)29; SSE-NEXT:    store <4 x i32> [[TMP2]], ptr @c32, align 430; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 431; SSE-NEXT:    [[TMP4:%.*]] = sdiv <4 x i32> [[TMP3]], splat (i32 5)32; SSE-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 433; SSE-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 434; SSE-NEXT:    [[TMP6:%.*]] = sdiv <4 x i32> [[TMP5]], splat (i32 5)35; SSE-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 436; SSE-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 437; SSE-NEXT:    [[TMP8:%.*]] = sdiv <4 x i32> [[TMP7]], splat (i32 5)38; SSE-NEXT:    store <4 x i32> [[TMP8]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 439; SSE-NEXT:    ret void40;41; SLM-LABEL: @sdiv_v16i32_uniformconst(42; SLM-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 443; SLM-NEXT:    [[TMP2:%.*]] = sdiv <4 x i32> [[TMP1]], splat (i32 5)44; SLM-NEXT:    store <4 x i32> [[TMP2]], ptr @c32, align 445; SLM-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 446; SLM-NEXT:    [[TMP4:%.*]] = sdiv <4 x i32> [[TMP3]], splat (i32 5)47; SLM-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 448; SLM-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 449; SLM-NEXT:    [[TMP6:%.*]] = sdiv <4 x i32> [[TMP5]], splat (i32 5)50; SLM-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 451; SLM-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 452; SLM-NEXT:    [[TMP8:%.*]] = sdiv <4 x i32> [[TMP7]], splat (i32 5)53; SLM-NEXT:    store <4 x i32> [[TMP8]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 454; SLM-NEXT:    ret void55;56; AVX-LABEL: @sdiv_v16i32_uniformconst(57; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @a32, align 458; AVX-NEXT:    [[TMP2:%.*]] = sdiv <8 x i32> [[TMP1]], splat (i32 5)59; AVX-NEXT:    store <8 x i32> [[TMP2]], ptr @c32, align 460; AVX-NEXT:    [[TMP3:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 461; AVX-NEXT:    [[TMP4:%.*]] = sdiv <8 x i32> [[TMP3]], splat (i32 5)62; AVX-NEXT:    store <8 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 463; AVX-NEXT:    ret void64;65; AVX512-LABEL: @sdiv_v16i32_uniformconst(66; AVX512-NEXT:    [[TMP1:%.*]] = load <16 x i32>, ptr @a32, align 467; AVX512-NEXT:    [[TMP2:%.*]] = sdiv <16 x i32> [[TMP1]], splat (i32 5)68; AVX512-NEXT:    store <16 x i32> [[TMP2]], ptr @c32, align 469; AVX512-NEXT:    ret void70;71  %a0  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 0 ), align 472  %a1  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1 ), align 473  %a2  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 2 ), align 474  %a3  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 3 ), align 475  %a4  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4 ), align 476  %a5  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 5 ), align 477  %a6  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 6 ), align 478  %a7  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 7 ), align 479  %a8  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8 ), align 480  %a9  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 9 ), align 481  %a10 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 10), align 482  %a11 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 11), align 483  %a12 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 484  %a13 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 13), align 485  %a14 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 14), align 486  %a15 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 15), align 487  %r0  = sdiv i32 %a0 , 588  %r1  = sdiv i32 %a1 , 589  %r2  = sdiv i32 %a2 , 590  %r3  = sdiv i32 %a3 , 591  %r4  = sdiv i32 %a4 , 592  %r5  = sdiv i32 %a5 , 593  %r6  = sdiv i32 %a6 , 594  %r7  = sdiv i32 %a7 , 595  %r8  = sdiv i32 %a8 , 596  %r9  = sdiv i32 %a9 , 597  %r10 = sdiv i32 %a10, 598  %r11 = sdiv i32 %a11, 599  %r12 = sdiv i32 %a12, 5100  %r13 = sdiv i32 %a13, 5101  %r14 = sdiv i32 %a14, 5102  %r15 = sdiv i32 %a15, 5103  store i32 %r0 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 0 ), align 4104  store i32 %r1 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 1 ), align 4105  store i32 %r2 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 2 ), align 4106  store i32 %r3 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 3 ), align 4107  store i32 %r4 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4 ), align 4108  store i32 %r5 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 5 ), align 4109  store i32 %r6 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 6 ), align 4110  store i32 %r7 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 7 ), align 4111  store i32 %r8 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8 ), align 4112  store i32 %r9 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 9 ), align 4113  store i32 %r10, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 10), align 4114  store i32 %r11, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 11), align 4115  store i32 %r12, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4116  store i32 %r13, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 13), align 4117  store i32 %r14, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 14), align 4118  store i32 %r15, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 15), align 4119  ret void120}121 122define void @srem_v16i32_uniformconst() {123; SSE-LABEL: @srem_v16i32_uniformconst(124; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 4125; SSE-NEXT:    [[TMP2:%.*]] = srem <4 x i32> [[TMP1]], splat (i32 5)126; SSE-NEXT:    store <4 x i32> [[TMP2]], ptr @c32, align 4127; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4128; SSE-NEXT:    [[TMP4:%.*]] = srem <4 x i32> [[TMP3]], splat (i32 5)129; SSE-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 4130; SSE-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4131; SSE-NEXT:    [[TMP6:%.*]] = srem <4 x i32> [[TMP5]], splat (i32 5)132; SSE-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4133; SSE-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4134; SSE-NEXT:    [[TMP8:%.*]] = srem <4 x i32> [[TMP7]], splat (i32 5)135; SSE-NEXT:    store <4 x i32> [[TMP8]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4136; SSE-NEXT:    ret void137;138; SLM-LABEL: @srem_v16i32_uniformconst(139; SLM-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 4140; SLM-NEXT:    [[TMP2:%.*]] = srem <4 x i32> [[TMP1]], splat (i32 5)141; SLM-NEXT:    store <4 x i32> [[TMP2]], ptr @c32, align 4142; SLM-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4143; SLM-NEXT:    [[TMP4:%.*]] = srem <4 x i32> [[TMP3]], splat (i32 5)144; SLM-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 4145; SLM-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4146; SLM-NEXT:    [[TMP6:%.*]] = srem <4 x i32> [[TMP5]], splat (i32 5)147; SLM-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4148; SLM-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4149; SLM-NEXT:    [[TMP8:%.*]] = srem <4 x i32> [[TMP7]], splat (i32 5)150; SLM-NEXT:    store <4 x i32> [[TMP8]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4151; SLM-NEXT:    ret void152;153; AVX-LABEL: @srem_v16i32_uniformconst(154; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @a32, align 4155; AVX-NEXT:    [[TMP2:%.*]] = srem <8 x i32> [[TMP1]], splat (i32 5)156; AVX-NEXT:    store <8 x i32> [[TMP2]], ptr @c32, align 4157; AVX-NEXT:    [[TMP3:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4158; AVX-NEXT:    [[TMP4:%.*]] = srem <8 x i32> [[TMP3]], splat (i32 5)159; AVX-NEXT:    store <8 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4160; AVX-NEXT:    ret void161;162; AVX512-LABEL: @srem_v16i32_uniformconst(163; AVX512-NEXT:    [[TMP1:%.*]] = load <16 x i32>, ptr @a32, align 4164; AVX512-NEXT:    [[TMP2:%.*]] = srem <16 x i32> [[TMP1]], splat (i32 5)165; AVX512-NEXT:    store <16 x i32> [[TMP2]], ptr @c32, align 4166; AVX512-NEXT:    ret void167;168  %a0  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 0 ), align 4169  %a1  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1 ), align 4170  %a2  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 2 ), align 4171  %a3  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 3 ), align 4172  %a4  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4 ), align 4173  %a5  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 5 ), align 4174  %a6  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 6 ), align 4175  %a7  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 7 ), align 4176  %a8  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8 ), align 4177  %a9  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 9 ), align 4178  %a10 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 10), align 4179  %a11 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 11), align 4180  %a12 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4181  %a13 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 13), align 4182  %a14 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 14), align 4183  %a15 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 15), align 4184  %r0  = srem i32 %a0 , 5185  %r1  = srem i32 %a1 , 5186  %r2  = srem i32 %a2 , 5187  %r3  = srem i32 %a3 , 5188  %r4  = srem i32 %a4 , 5189  %r5  = srem i32 %a5 , 5190  %r6  = srem i32 %a6 , 5191  %r7  = srem i32 %a7 , 5192  %r8  = srem i32 %a8 , 5193  %r9  = srem i32 %a9 , 5194  %r10 = srem i32 %a10, 5195  %r11 = srem i32 %a11, 5196  %r12 = srem i32 %a12, 5197  %r13 = srem i32 %a13, 5198  %r14 = srem i32 %a14, 5199  %r15 = srem i32 %a15, 5200  store i32 %r0 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 0 ), align 4201  store i32 %r1 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 1 ), align 4202  store i32 %r2 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 2 ), align 4203  store i32 %r3 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 3 ), align 4204  store i32 %r4 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4 ), align 4205  store i32 %r5 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 5 ), align 4206  store i32 %r6 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 6 ), align 4207  store i32 %r7 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 7 ), align 4208  store i32 %r8 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8 ), align 4209  store i32 %r9 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 9 ), align 4210  store i32 %r10, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 10), align 4211  store i32 %r11, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 11), align 4212  store i32 %r12, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4213  store i32 %r13, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 13), align 4214  store i32 %r14, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 14), align 4215  store i32 %r15, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 15), align 4216  ret void217}218 219define void @udiv_v16i32_uniformconst() {220; SSE-LABEL: @udiv_v16i32_uniformconst(221; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 4222; SSE-NEXT:    [[TMP2:%.*]] = udiv <4 x i32> [[TMP1]], splat (i32 5)223; SSE-NEXT:    store <4 x i32> [[TMP2]], ptr @c32, align 4224; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4225; SSE-NEXT:    [[TMP4:%.*]] = udiv <4 x i32> [[TMP3]], splat (i32 5)226; SSE-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 4227; SSE-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4228; SSE-NEXT:    [[TMP6:%.*]] = udiv <4 x i32> [[TMP5]], splat (i32 5)229; SSE-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4230; SSE-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4231; SSE-NEXT:    [[TMP8:%.*]] = udiv <4 x i32> [[TMP7]], splat (i32 5)232; SSE-NEXT:    store <4 x i32> [[TMP8]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4233; SSE-NEXT:    ret void234;235; SLM-LABEL: @udiv_v16i32_uniformconst(236; SLM-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 4237; SLM-NEXT:    [[TMP2:%.*]] = udiv <4 x i32> [[TMP1]], splat (i32 5)238; SLM-NEXT:    store <4 x i32> [[TMP2]], ptr @c32, align 4239; SLM-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4240; SLM-NEXT:    [[TMP4:%.*]] = udiv <4 x i32> [[TMP3]], splat (i32 5)241; SLM-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 4242; SLM-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4243; SLM-NEXT:    [[TMP6:%.*]] = udiv <4 x i32> [[TMP5]], splat (i32 5)244; SLM-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4245; SLM-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4246; SLM-NEXT:    [[TMP8:%.*]] = udiv <4 x i32> [[TMP7]], splat (i32 5)247; SLM-NEXT:    store <4 x i32> [[TMP8]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4248; SLM-NEXT:    ret void249;250; AVX-LABEL: @udiv_v16i32_uniformconst(251; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @a32, align 4252; AVX-NEXT:    [[TMP2:%.*]] = udiv <8 x i32> [[TMP1]], splat (i32 5)253; AVX-NEXT:    store <8 x i32> [[TMP2]], ptr @c32, align 4254; AVX-NEXT:    [[TMP3:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4255; AVX-NEXT:    [[TMP4:%.*]] = udiv <8 x i32> [[TMP3]], splat (i32 5)256; AVX-NEXT:    store <8 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4257; AVX-NEXT:    ret void258;259; AVX512-LABEL: @udiv_v16i32_uniformconst(260; AVX512-NEXT:    [[TMP1:%.*]] = load <16 x i32>, ptr @a32, align 4261; AVX512-NEXT:    [[TMP2:%.*]] = udiv <16 x i32> [[TMP1]], splat (i32 5)262; AVX512-NEXT:    store <16 x i32> [[TMP2]], ptr @c32, align 4263; AVX512-NEXT:    ret void264;265  %a0  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 0 ), align 4266  %a1  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1 ), align 4267  %a2  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 2 ), align 4268  %a3  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 3 ), align 4269  %a4  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4 ), align 4270  %a5  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 5 ), align 4271  %a6  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 6 ), align 4272  %a7  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 7 ), align 4273  %a8  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8 ), align 4274  %a9  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 9 ), align 4275  %a10 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 10), align 4276  %a11 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 11), align 4277  %a12 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4278  %a13 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 13), align 4279  %a14 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 14), align 4280  %a15 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 15), align 4281  %r0  = udiv i32 %a0 , 5282  %r1  = udiv i32 %a1 , 5283  %r2  = udiv i32 %a2 , 5284  %r3  = udiv i32 %a3 , 5285  %r4  = udiv i32 %a4 , 5286  %r5  = udiv i32 %a5 , 5287  %r6  = udiv i32 %a6 , 5288  %r7  = udiv i32 %a7 , 5289  %r8  = udiv i32 %a8 , 5290  %r9  = udiv i32 %a9 , 5291  %r10 = udiv i32 %a10, 5292  %r11 = udiv i32 %a11, 5293  %r12 = udiv i32 %a12, 5294  %r13 = udiv i32 %a13, 5295  %r14 = udiv i32 %a14, 5296  %r15 = udiv i32 %a15, 5297  store i32 %r0 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 0 ), align 4298  store i32 %r1 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 1 ), align 4299  store i32 %r2 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 2 ), align 4300  store i32 %r3 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 3 ), align 4301  store i32 %r4 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4 ), align 4302  store i32 %r5 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 5 ), align 4303  store i32 %r6 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 6 ), align 4304  store i32 %r7 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 7 ), align 4305  store i32 %r8 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8 ), align 4306  store i32 %r9 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 9 ), align 4307  store i32 %r10, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 10), align 4308  store i32 %r11, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 11), align 4309  store i32 %r12, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4310  store i32 %r13, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 13), align 4311  store i32 %r14, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 14), align 4312  store i32 %r15, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 15), align 4313  ret void314}315 316define void @urem_v16i32_uniformconst() {317; SSE-LABEL: @urem_v16i32_uniformconst(318; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 4319; SSE-NEXT:    [[TMP2:%.*]] = urem <4 x i32> [[TMP1]], splat (i32 5)320; SSE-NEXT:    store <4 x i32> [[TMP2]], ptr @c32, align 4321; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4322; SSE-NEXT:    [[TMP4:%.*]] = urem <4 x i32> [[TMP3]], splat (i32 5)323; SSE-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 4324; SSE-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4325; SSE-NEXT:    [[TMP6:%.*]] = urem <4 x i32> [[TMP5]], splat (i32 5)326; SSE-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4327; SSE-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4328; SSE-NEXT:    [[TMP8:%.*]] = urem <4 x i32> [[TMP7]], splat (i32 5)329; SSE-NEXT:    store <4 x i32> [[TMP8]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4330; SSE-NEXT:    ret void331;332; SLM-LABEL: @urem_v16i32_uniformconst(333; SLM-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 4334; SLM-NEXT:    [[TMP2:%.*]] = urem <4 x i32> [[TMP1]], splat (i32 5)335; SLM-NEXT:    store <4 x i32> [[TMP2]], ptr @c32, align 4336; SLM-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4337; SLM-NEXT:    [[TMP4:%.*]] = urem <4 x i32> [[TMP3]], splat (i32 5)338; SLM-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 4339; SLM-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4340; SLM-NEXT:    [[TMP6:%.*]] = urem <4 x i32> [[TMP5]], splat (i32 5)341; SLM-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4342; SLM-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4343; SLM-NEXT:    [[TMP8:%.*]] = urem <4 x i32> [[TMP7]], splat (i32 5)344; SLM-NEXT:    store <4 x i32> [[TMP8]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4345; SLM-NEXT:    ret void346;347; AVX-LABEL: @urem_v16i32_uniformconst(348; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @a32, align 4349; AVX-NEXT:    [[TMP2:%.*]] = urem <8 x i32> [[TMP1]], splat (i32 5)350; AVX-NEXT:    store <8 x i32> [[TMP2]], ptr @c32, align 4351; AVX-NEXT:    [[TMP3:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4352; AVX-NEXT:    [[TMP4:%.*]] = urem <8 x i32> [[TMP3]], splat (i32 5)353; AVX-NEXT:    store <8 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4354; AVX-NEXT:    ret void355;356; AVX512-LABEL: @urem_v16i32_uniformconst(357; AVX512-NEXT:    [[TMP1:%.*]] = load <16 x i32>, ptr @a32, align 4358; AVX512-NEXT:    [[TMP2:%.*]] = urem <16 x i32> [[TMP1]], splat (i32 5)359; AVX512-NEXT:    store <16 x i32> [[TMP2]], ptr @c32, align 4360; AVX512-NEXT:    ret void361;362  %a0  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 0 ), align 4363  %a1  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1 ), align 4364  %a2  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 2 ), align 4365  %a3  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 3 ), align 4366  %a4  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4 ), align 4367  %a5  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 5 ), align 4368  %a6  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 6 ), align 4369  %a7  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 7 ), align 4370  %a8  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8 ), align 4371  %a9  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 9 ), align 4372  %a10 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 10), align 4373  %a11 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 11), align 4374  %a12 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4375  %a13 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 13), align 4376  %a14 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 14), align 4377  %a15 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 15), align 4378  %r0  = urem i32 %a0 , 5379  %r1  = urem i32 %a1 , 5380  %r2  = urem i32 %a2 , 5381  %r3  = urem i32 %a3 , 5382  %r4  = urem i32 %a4 , 5383  %r5  = urem i32 %a5 , 5384  %r6  = urem i32 %a6 , 5385  %r7  = urem i32 %a7 , 5386  %r8  = urem i32 %a8 , 5387  %r9  = urem i32 %a9 , 5388  %r10 = urem i32 %a10, 5389  %r11 = urem i32 %a11, 5390  %r12 = urem i32 %a12, 5391  %r13 = urem i32 %a13, 5392  %r14 = urem i32 %a14, 5393  %r15 = urem i32 %a15, 5394  store i32 %r0 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 0 ), align 4395  store i32 %r1 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 1 ), align 4396  store i32 %r2 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 2 ), align 4397  store i32 %r3 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 3 ), align 4398  store i32 %r4 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4 ), align 4399  store i32 %r5 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 5 ), align 4400  store i32 %r6 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 6 ), align 4401  store i32 %r7 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 7 ), align 4402  store i32 %r8 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8 ), align 4403  store i32 %r9 , ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 9 ), align 4404  store i32 %r10, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 10), align 4405  store i32 %r11, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 11), align 4406  store i32 %r12, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4407  store i32 %r13, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 13), align 4408  store i32 %r14, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 14), align 4409  store i32 %r15, ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 15), align 4410  ret void411}412