brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.0 KiB · cbf8bc9 Raw
558 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=slp-vectorizer -S %s | FileCheck %s3; RUN: opt -aa-pipeline=basic-aa -passes=slp-vectorizer -S %s | FileCheck %s4 5target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"6target triple = "arm64-apple-ios5.0.0"7 8; Some negative tests first.9 10; We need selects with a uniform predicate to lower effectively to vector11; instructions.12define void @select_mixed_predicates_8xi16(ptr %ptr, i16 %x) {13; CHECK-LABEL: @select_mixed_predicates_8xi16(14; CHECK-NEXT:  entry:15; CHECK-NEXT:    [[L_0:%.*]] = load i16, ptr [[PTR:%.*]], align 216; CHECK-NEXT:    [[CMP_0:%.*]] = icmp ult i16 [[L_0]], 1638317; CHECK-NEXT:    [[S_0:%.*]] = select i1 [[CMP_0]], i16 [[L_0]], i16 [[X:%.*]]18; CHECK-NEXT:    store i16 [[S_0]], ptr [[PTR]], align 219; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i16, ptr [[PTR]], i16 120; CHECK-NEXT:    [[L_1:%.*]] = load i16, ptr [[GEP_1]], align 221; CHECK-NEXT:    [[CMP_1:%.*]] = icmp sgt i16 [[L_1]], 1638322; CHECK-NEXT:    [[S_1:%.*]] = select i1 [[CMP_1]], i16 [[L_1]], i16 [[X]]23; CHECK-NEXT:    store i16 [[S_1]], ptr [[GEP_1]], align 224; CHECK-NEXT:    [[GEP_2:%.*]] = getelementptr inbounds i16, ptr [[PTR]], i16 225; CHECK-NEXT:    [[L_2:%.*]] = load i16, ptr [[GEP_2]], align 226; CHECK-NEXT:    [[CMP_2:%.*]] = icmp eq i16 [[L_2]], 1638327; CHECK-NEXT:    [[S_2:%.*]] = select i1 [[CMP_2]], i16 [[L_2]], i16 [[X]]28; CHECK-NEXT:    store i16 [[S_2]], ptr [[GEP_2]], align 229; CHECK-NEXT:    [[GEP_3:%.*]] = getelementptr inbounds i16, ptr [[PTR]], i16 330; CHECK-NEXT:    [[L_3:%.*]] = load i16, ptr [[GEP_3]], align 231; CHECK-NEXT:    [[CMP_3:%.*]] = icmp ne i16 [[L_3]], 1638332; CHECK-NEXT:    [[S_3:%.*]] = select i1 [[CMP_3]], i16 [[L_3]], i16 [[X]]33; CHECK-NEXT:    store i16 [[S_3]], ptr [[GEP_3]], align 234; CHECK-NEXT:    [[GEP_4:%.*]] = getelementptr inbounds i16, ptr [[PTR]], i16 435; CHECK-NEXT:    [[L_4:%.*]] = load i16, ptr [[GEP_4]], align 236; CHECK-NEXT:    [[CMP_4:%.*]] = icmp eq i16 [[L_4]], 1638337; CHECK-NEXT:    [[S_4:%.*]] = select i1 [[CMP_4]], i16 [[L_4]], i16 [[X]]38; CHECK-NEXT:    store i16 [[S_4]], ptr [[GEP_4]], align 239; CHECK-NEXT:    [[GEP_5:%.*]] = getelementptr inbounds i16, ptr [[PTR]], i16 540; CHECK-NEXT:    [[L_5:%.*]] = load i16, ptr [[GEP_5]], align 241; CHECK-NEXT:    [[CMP_5:%.*]] = icmp ule i16 [[L_5]], 1638342; CHECK-NEXT:    [[S_5:%.*]] = select i1 [[CMP_5]], i16 [[L_5]], i16 [[X]]43; CHECK-NEXT:    store i16 [[S_5]], ptr [[GEP_5]], align 244; CHECK-NEXT:    [[GEP_6:%.*]] = getelementptr inbounds i16, ptr [[PTR]], i16 645; CHECK-NEXT:    [[L_6:%.*]] = load i16, ptr [[GEP_6]], align 246; CHECK-NEXT:    [[CMP_6:%.*]] = icmp ult i16 [[L_6]], 1638347; CHECK-NEXT:    [[S_6:%.*]] = select i1 [[CMP_6]], i16 [[L_6]], i16 [[X]]48; CHECK-NEXT:    store i16 [[S_6]], ptr [[GEP_6]], align 249; CHECK-NEXT:    [[GEP_7:%.*]] = getelementptr inbounds i16, ptr [[PTR]], i16 750; CHECK-NEXT:    [[L_7:%.*]] = load i16, ptr [[GEP_7]], align 251; CHECK-NEXT:    [[CMP_7:%.*]] = icmp ult i16 [[L_7]], 1638352; CHECK-NEXT:    [[S_7:%.*]] = select i1 [[CMP_7]], i16 [[L_7]], i16 [[X]]53; CHECK-NEXT:    store i16 [[S_7]], ptr [[GEP_7]], align 254; CHECK-NEXT:    ret void55;56entry:57  %l.0 = load i16, ptr %ptr58  %cmp.0 = icmp ult i16 %l.0, 1638359  %s.0 = select i1 %cmp.0, i16 %l.0, i16 %x60  store i16 %s.0, ptr %ptr, align 261 62  %gep.1 = getelementptr inbounds i16, ptr %ptr, i16 163  %l.1 = load i16, ptr %gep.164  %cmp.1 = icmp sgt i16 %l.1, 1638365  %s.1 = select i1 %cmp.1, i16 %l.1, i16 %x66  store i16 %s.1, ptr %gep.1, align 267 68  %gep.2 = getelementptr inbounds i16, ptr %ptr, i16 269  %l.2 = load i16, ptr %gep.270  %cmp.2 = icmp eq i16 %l.2, 1638371  %s.2 = select i1 %cmp.2, i16 %l.2, i16 %x72  store i16 %s.2, ptr %gep.2, align 273 74  %gep.3 = getelementptr inbounds i16, ptr %ptr, i16 375  %l.3 = load i16, ptr %gep.376  %cmp.3 = icmp ne i16 %l.3, 1638377  %s.3 = select i1 %cmp.3, i16 %l.3, i16 %x78  store i16 %s.3, ptr %gep.3, align 279 80  %gep.4 = getelementptr inbounds i16, ptr %ptr, i16 481  %l.4 = load i16, ptr %gep.482  %cmp.4 = icmp eq i16 %l.4, 1638383  %s.4 = select i1 %cmp.4, i16 %l.4, i16 %x84  store i16 %s.4, ptr %gep.4, align 285 86  %gep.5 = getelementptr inbounds i16, ptr %ptr, i16 587  %l.5 = load i16, ptr %gep.588  %cmp.5 = icmp ule i16 %l.5, 1638389  %s.5 = select i1 %cmp.5, i16 %l.5, i16 %x90  store i16 %s.5, ptr %gep.5, align 291 92  %gep.6 = getelementptr inbounds i16, ptr %ptr, i16 693  %l.6 = load i16, ptr %gep.694  %cmp.6 = icmp ult i16 %l.6, 1638395  %s.6 = select i1 %cmp.6, i16 %l.6, i16 %x96  store i16 %s.6, ptr %gep.6, align 297 98  %gep.7 = getelementptr inbounds i16, ptr %ptr, i16 799  %l.7 = load i16, ptr %gep.7100  %cmp.7 = icmp ult i16 %l.7, 16383101  %s.7 = select i1 %cmp.7, i16 %l.7, i16 %x102  store i16 %s.7, ptr %gep.7, align 2103  ret void104}105 106define void @select_uniform_ugt_7xi8(ptr %ptr, i8 %x) {107; CHECK-LABEL: @select_uniform_ugt_7xi8(108; CHECK-NEXT:  entry:109; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i8>, ptr [[PTR:%.*]], align 1110; CHECK-NEXT:    [[TMP1:%.*]] = icmp ugt <4 x i8> [[TMP0]], splat (i8 -1)111; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <4 x i8> poison, i8 [[X:%.*]], i32 0112; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> poison, <4 x i32> zeroinitializer113; CHECK-NEXT:    [[TMP4:%.*]] = select <4 x i1> [[TMP1]], <4 x i8> [[TMP0]], <4 x i8> [[TMP3]]114; CHECK-NEXT:    store <4 x i8> [[TMP4]], ptr [[PTR]], align 2115; CHECK-NEXT:    [[GEP_4:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i8 4116; CHECK-NEXT:    [[L_4:%.*]] = load i8, ptr [[GEP_4]], align 1117; CHECK-NEXT:    [[CMP_4:%.*]] = icmp ugt i8 [[L_4]], -1118; CHECK-NEXT:    [[S_4:%.*]] = select i1 [[CMP_4]], i8 [[L_4]], i8 [[X]]119; CHECK-NEXT:    store i8 [[S_4]], ptr [[GEP_4]], align 2120; CHECK-NEXT:    [[GEP_5:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i8 5121; CHECK-NEXT:    [[L_5:%.*]] = load i8, ptr [[GEP_5]], align 1122; CHECK-NEXT:    [[CMP_5:%.*]] = icmp ugt i8 [[L_5]], -1123; CHECK-NEXT:    [[S_5:%.*]] = select i1 [[CMP_5]], i8 [[L_5]], i8 [[X]]124; CHECK-NEXT:    store i8 [[S_5]], ptr [[GEP_5]], align 2125; CHECK-NEXT:    [[GEP_6:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i8 6126; CHECK-NEXT:    [[L_6:%.*]] = load i8, ptr [[GEP_6]], align 1127; CHECK-NEXT:    [[CMP_6:%.*]] = icmp ugt i8 [[L_6]], -1128; CHECK-NEXT:    [[S_6:%.*]] = select i1 [[CMP_6]], i8 [[L_6]], i8 [[X]]129; CHECK-NEXT:    store i8 [[S_6]], ptr [[GEP_6]], align 2130; CHECK-NEXT:    ret void131;132entry:133  %l.0 = load i8, ptr %ptr134  %cmp.0 = icmp ugt i8 %l.0, 16383135  %s.0 = select i1 %cmp.0, i8 %l.0, i8 %x136  store i8 %s.0, ptr %ptr, align 2137 138  %gep.1 = getelementptr inbounds i8, ptr %ptr, i8 1139  %l.1 = load i8, ptr %gep.1140  %cmp.1 = icmp ugt i8 %l.1, 16383141  %s.1 = select i1 %cmp.1, i8 %l.1, i8 %x142  store i8 %s.1, ptr %gep.1, align 2143 144  %gep.2 = getelementptr inbounds i8, ptr %ptr, i8 2145  %l.2 = load i8, ptr %gep.2146  %cmp.2 = icmp ugt i8 %l.2, 16383147  %s.2 = select i1 %cmp.2, i8 %l.2, i8 %x148  store i8 %s.2, ptr %gep.2, align 2149 150  %gep.3 = getelementptr inbounds i8, ptr %ptr, i8 3151  %l.3 = load i8, ptr %gep.3152  %cmp.3 = icmp ugt i8 %l.3, 16383153  %s.3 = select i1 %cmp.3, i8 %l.3, i8 %x154  store i8 %s.3, ptr %gep.3, align 2155 156  %gep.4 = getelementptr inbounds i8, ptr %ptr, i8 4157  %l.4 = load i8, ptr %gep.4158  %cmp.4 = icmp ugt i8 %l.4, 16383159  %s.4 = select i1 %cmp.4, i8 %l.4, i8 %x160  store i8 %s.4, ptr %gep.4, align 2161 162  %gep.5 = getelementptr inbounds i8, ptr %ptr, i8 5163  %l.5 = load i8, ptr %gep.5164  %cmp.5 = icmp ugt i8 %l.5, 16383165  %s.5 = select i1 %cmp.5, i8 %l.5, i8 %x166  store i8 %s.5, ptr %gep.5, align 2167 168  %gep.6 = getelementptr inbounds i8, ptr %ptr, i8 6169  %l.6 = load i8, ptr %gep.6170  %cmp.6 = icmp ugt i8 %l.6, 16383171  %s.6 = select i1 %cmp.6, i8 %l.6, i8 %x172  store i8 %s.6, ptr %gep.6, align 2173 174  ret void175}176 177 178; Positive tests.179 180define void @select_uniform_ugt_8xi8(ptr %ptr, i8 %x) {181; CHECK-LABEL: @select_uniform_ugt_8xi8(182; CHECK-NEXT:  entry:183; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i8>, ptr [[PTR:%.*]], align 1184; CHECK-NEXT:    [[TMP1:%.*]] = icmp ugt <8 x i8> [[TMP0]], splat (i8 -1)185; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <8 x i8> poison, i8 [[X:%.*]], i32 0186; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i8> [[TMP2]], <8 x i8> poison, <8 x i32> zeroinitializer187; CHECK-NEXT:    [[TMP4:%.*]] = select <8 x i1> [[TMP1]], <8 x i8> [[TMP0]], <8 x i8> [[TMP3]]188; CHECK-NEXT:    store <8 x i8> [[TMP4]], ptr [[PTR]], align 2189; CHECK-NEXT:    ret void190;191entry:192  %l.0 = load i8, ptr %ptr193  %cmp.0 = icmp ugt i8 %l.0, 16383194  %s.0 = select i1 %cmp.0, i8 %l.0, i8 %x195  store i8 %s.0, ptr %ptr, align 2196 197  %gep.1 = getelementptr inbounds i8, ptr %ptr, i8 1198  %l.1 = load i8, ptr %gep.1199  %cmp.1 = icmp ugt i8 %l.1, 16383200  %s.1 = select i1 %cmp.1, i8 %l.1, i8 %x201  store i8 %s.1, ptr %gep.1, align 2202 203  %gep.2 = getelementptr inbounds i8, ptr %ptr, i8 2204  %l.2 = load i8, ptr %gep.2205  %cmp.2 = icmp ugt i8 %l.2, 16383206  %s.2 = select i1 %cmp.2, i8 %l.2, i8 %x207  store i8 %s.2, ptr %gep.2, align 2208 209  %gep.3 = getelementptr inbounds i8, ptr %ptr, i8 3210  %l.3 = load i8, ptr %gep.3211  %cmp.3 = icmp ugt i8 %l.3, 16383212  %s.3 = select i1 %cmp.3, i8 %l.3, i8 %x213  store i8 %s.3, ptr %gep.3, align 2214 215  %gep.4 = getelementptr inbounds i8, ptr %ptr, i8 4216  %l.4 = load i8, ptr %gep.4217  %cmp.4 = icmp ugt i8 %l.4, 16383218  %s.4 = select i1 %cmp.4, i8 %l.4, i8 %x219  store i8 %s.4, ptr %gep.4, align 2220 221  %gep.5 = getelementptr inbounds i8, ptr %ptr, i8 5222  %l.5 = load i8, ptr %gep.5223  %cmp.5 = icmp ugt i8 %l.5, 16383224  %s.5 = select i1 %cmp.5, i8 %l.5, i8 %x225  store i8 %s.5, ptr %gep.5, align 2226 227  %gep.6 = getelementptr inbounds i8, ptr %ptr, i8 6228  %l.6 = load i8, ptr %gep.6229  %cmp.6 = icmp ugt i8 %l.6, 16383230  %s.6 = select i1 %cmp.6, i8 %l.6, i8 %x231  store i8 %s.6, ptr %gep.6, align 2232 233  %gep.7 = getelementptr inbounds i8, ptr %ptr, i8 7234  %l.7 = load i8, ptr %gep.7235  %cmp.7 = icmp ugt i8 %l.7, 16383236  %s.7 = select i1 %cmp.7, i8 %l.7, i8 %x237  store i8 %s.7, ptr %gep.7, align 2238  ret void239}240 241define void @select_uniform_ugt_16xi8(ptr %ptr, i8 %x) {242; CHECK-LABEL: @select_uniform_ugt_16xi8(243; CHECK-NEXT:  entry:244; CHECK-NEXT:    [[GEP_8:%.*]] = getelementptr inbounds i8, ptr [[PTR:%.*]], i8 8245; CHECK-NEXT:    [[L_8:%.*]] = load i8, ptr [[GEP_8]], align 1246; CHECK-NEXT:    [[CMP_8:%.*]] = icmp ugt i8 [[L_8]], -1247; CHECK-NEXT:    [[GEP_9:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i8 9248; CHECK-NEXT:    [[GEP_11:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i8 11249; CHECK-NEXT:    [[L_11:%.*]] = load i8, ptr [[GEP_11]], align 1250; CHECK-NEXT:    [[GEP_12:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i8 12251; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i8>, ptr [[PTR]], align 1252; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[PTR]], align 1253; CHECK-NEXT:    [[S_8:%.*]] = select i1 [[CMP_8]], i8 [[TMP1]], i8 [[X:%.*]]254; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i8>, ptr [[GEP_9]], align 1255; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i8>, ptr [[GEP_12]], align 1256; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <8 x i8> [[TMP0]], <8 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>257; CHECK-NEXT:    [[TMP11:%.*]] = shufflevector <2 x i8> [[TMP2]], <2 x i8> poison, <16 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>258; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i8> [[TMP2]], <2 x i8> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>259; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i8> [[TMP0]], <8 x i8> [[TMP4]], <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 0, i32 8, i32 9, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>260; CHECK-NEXT:    [[TMP6:%.*]] = insertelement <16 x i8> [[TMP5]], i8 [[L_11]], i32 11261; CHECK-NEXT:    [[TMP15:%.*]] = shufflevector <16 x i8> [[TMP6]], <16 x i8> [[TMP7]], <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>262; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i8> [[TMP3]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>263; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <16 x i8> [[TMP15]], <16 x i8> [[TMP10]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>264; CHECK-NEXT:    [[TMP9:%.*]] = icmp ugt <16 x i8> [[TMP8]], splat (i8 -1)265; CHECK-NEXT:    [[TMP12:%.*]] = insertelement <16 x i8> poison, i8 [[X]], i32 0266; CHECK-NEXT:    [[TMP13:%.*]] = shufflevector <16 x i8> [[TMP12]], <16 x i8> poison, <16 x i32> zeroinitializer267; CHECK-NEXT:    [[TMP14:%.*]] = select <16 x i1> [[TMP9]], <16 x i8> [[TMP8]], <16 x i8> [[TMP13]]268; CHECK-NEXT:    store <16 x i8> [[TMP14]], ptr [[PTR]], align 2269; CHECK-NEXT:    ret void270;271entry:272  %l.0 = load i8, ptr %ptr273  %cmp.0 = icmp ugt i8 %l.0, 16383274  %s.0 = select i1 %cmp.0, i8 %l.0, i8 %x275  store i8 %s.0, ptr %ptr, align 2276 277  %gep.1 = getelementptr inbounds i8, ptr %ptr, i8 1278  %l.1 = load i8, ptr %gep.1279  %cmp.1 = icmp ugt i8 %l.1, 16383280  %s.1 = select i1 %cmp.1, i8 %l.1, i8 %x281  store i8 %s.1, ptr %gep.1, align 2282 283  %gep.2 = getelementptr inbounds i8, ptr %ptr, i8 2284  %l.2 = load i8, ptr %gep.2285  %cmp.2 = icmp ugt i8 %l.2, 16383286  %s.2 = select i1 %cmp.2, i8 %l.2, i8 %x287  store i8 %s.2, ptr %gep.2, align 2288 289  %gep.3 = getelementptr inbounds i8, ptr %ptr, i8 3290  %l.3 = load i8, ptr %gep.3291  %cmp.3 = icmp ugt i8 %l.3, 16383292  %s.3 = select i1 %cmp.3, i8 %l.3, i8 %x293  store i8 %s.3, ptr %gep.3, align 2294 295  %gep.4 = getelementptr inbounds i8, ptr %ptr, i8 4296  %l.4 = load i8, ptr %gep.4297  %cmp.4 = icmp ugt i8 %l.4, 16383298  %s.4 = select i1 %cmp.4, i8 %l.4, i8 %x299  store i8 %s.4, ptr %gep.4, align 2300 301  %gep.5 = getelementptr inbounds i8, ptr %ptr, i8 5302  %l.5 = load i8, ptr %gep.5303  %cmp.5 = icmp ugt i8 %l.5, 16383304  %s.5 = select i1 %cmp.5, i8 %l.5, i8 %x305  store i8 %s.5, ptr %gep.5, align 2306 307  %gep.6 = getelementptr inbounds i8, ptr %ptr, i8 6308  %l.6 = load i8, ptr %gep.6309  %cmp.6 = icmp ugt i8 %l.6, 16383310  %s.6 = select i1 %cmp.6, i8 %l.6, i8 %x311  store i8 %s.6, ptr %gep.6, align 2312 313  %gep.7 = getelementptr inbounds i8, ptr %ptr, i8 7314  %l.7 = load i8, ptr %gep.7315  %cmp.7 = icmp ugt i8 %l.7, 16383316  %s.7 = select i1 %cmp.7, i8 %l.7, i8 %x317  store i8 %s.7, ptr %gep.7, align 2318 319  %gep.8 = getelementptr inbounds i8, ptr %ptr, i8 8320  %l.8 = load i8, ptr %gep.8321  %cmp.8 = icmp ugt i8 %l.8, 16383322  %s.8 = select i1 %cmp.8, i8 %l.0, i8 %x323  store i8 %s.0, ptr %gep.8, align 2324 325  %gep.9 = getelementptr inbounds i8, ptr %ptr, i8 9326  %l.9 = load i8, ptr %gep.9327  %cmp.9 = icmp ugt i8 %l.9, 16383328  %s.9 = select i1 %cmp.9, i8 %l.9, i8 %x329  store i8 %s.9, ptr %gep.9, align 2330 331  %gep.10 = getelementptr inbounds i8, ptr %ptr, i8 10332  %l.10 = load i8, ptr %gep.10333  %cmp.10 = icmp ugt i8 %l.10, 16383334  %s.10 = select i1 %cmp.10, i8 %l.10, i8 %x335  store i8 %s.10, ptr %gep.10, align 2336 337  %gep.11 = getelementptr inbounds i8, ptr %ptr, i8 11338  %l.11 = load i8, ptr %gep.11339  %cmp.11 = icmp ugt i8 %l.11, 16383340  %s.11 = select i1 %cmp.11, i8 %l.11, i8 %x341  store i8 %s.11, ptr %gep.11, align 2342 343  %gep.12 = getelementptr inbounds i8, ptr %ptr, i8 12344  %l.12 = load i8, ptr %gep.12345  %cmp.12 = icmp ugt i8 %l.12, 16383346  %s.12 = select i1 %cmp.12, i8 %l.12, i8 %x347  store i8 %s.12, ptr %gep.12, align 2348 349  %gep.13 = getelementptr inbounds i8, ptr %ptr, i8 13350  %l.13 = load i8, ptr %gep.13351  %cmp.13 = icmp ugt i8 %l.13, 16383352  %s.13 = select i1 %cmp.13, i8 %l.13, i8 %x353  store i8 %s.13, ptr %gep.13, align 2354 355  %gep.14 = getelementptr inbounds i8, ptr %ptr, i8 14356  %l.14 = load i8, ptr %gep.14357  %cmp.14 = icmp ugt i8 %l.14, 16383358  %s.14 = select i1 %cmp.14, i8 %l.14, i8 %x359  store i8 %s.14, ptr %gep.14, align 2360 361  %gep.15 = getelementptr inbounds i8, ptr %ptr, i8 15362  %l.15 = load i8, ptr %gep.15363  %cmp.15 = icmp ugt i8 %l.15, 16383364  %s.15 = select i1 %cmp.15, i8 %l.15, i8 %x365  store i8 %s.15, ptr %gep.15, align 2366 367  ret void368}369 370 371define void @select_uniform_ugt_4xi16(ptr %ptr, i16 %x) {372; CHECK-LABEL: @select_uniform_ugt_4xi16(373; CHECK-NEXT:  entry:374; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i16>, ptr [[PTR:%.*]], align 2375; CHECK-NEXT:    [[TMP1:%.*]] = icmp ugt <4 x i16> [[TMP0]], splat (i16 16383)376; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <4 x i16> poison, i16 [[X:%.*]], i32 0377; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i16> [[TMP2]], <4 x i16> poison, <4 x i32> zeroinitializer378; CHECK-NEXT:    [[TMP4:%.*]] = select <4 x i1> [[TMP1]], <4 x i16> [[TMP0]], <4 x i16> [[TMP3]]379; CHECK-NEXT:    store <4 x i16> [[TMP4]], ptr [[PTR]], align 2380; CHECK-NEXT:    ret void381;382entry:383  %l.0 = load i16, ptr %ptr384  %cmp.0 = icmp ugt i16 %l.0, 16383385  %s.0 = select i1 %cmp.0, i16 %l.0, i16 %x386  store i16 %s.0, ptr %ptr, align 2387 388  %gep.1 = getelementptr inbounds i16, ptr %ptr, i16 1389  %l.1 = load i16, ptr %gep.1390  %cmp.1 = icmp ugt i16 %l.1, 16383391  %s.1 = select i1 %cmp.1, i16 %l.1, i16 %x392  store i16 %s.1, ptr %gep.1, align 2393 394  %gep.2 = getelementptr inbounds i16, ptr %ptr, i16 2395  %l.2 = load i16, ptr %gep.2396  %cmp.2 = icmp ugt i16 %l.2, 16383397  %s.2 = select i1 %cmp.2, i16 %l.2, i16 %x398  store i16 %s.2, ptr %gep.2, align 2399 400  %gep.3 = getelementptr inbounds i16, ptr %ptr, i16 3401  %l.3 = load i16, ptr %gep.3402  %cmp.3 = icmp ugt i16 %l.3, 16383403  %s.3 = select i1 %cmp.3, i16 %l.3, i16 %x404  store i16 %s.3, ptr %gep.3, align 2405 406  ret void407}408 409define void @select_uniform_ult_8xi16(ptr %ptr, i16 %x) {410; CHECK-LABEL: @select_uniform_ult_8xi16(411; CHECK-NEXT:  entry:412; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i16>, ptr [[PTR:%.*]], align 2413; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult <8 x i16> [[TMP0]], splat (i16 16383)414; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <8 x i16> poison, i16 [[X:%.*]], i32 0415; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i16> [[TMP2]], <8 x i16> poison, <8 x i32> zeroinitializer416; CHECK-NEXT:    [[TMP4:%.*]] = select <8 x i1> [[TMP1]], <8 x i16> [[TMP0]], <8 x i16> [[TMP3]]417; CHECK-NEXT:    store <8 x i16> [[TMP4]], ptr [[PTR]], align 2418; CHECK-NEXT:    ret void419;420entry:421  %l.0 = load i16, ptr %ptr422  %cmp.0 = icmp ult i16 %l.0, 16383423  %s.0 = select i1 %cmp.0, i16 %l.0, i16 %x424  store i16 %s.0, ptr %ptr, align 2425 426  %gep.1 = getelementptr inbounds i16, ptr %ptr, i16 1427  %l.1 = load i16, ptr %gep.1428  %cmp.1 = icmp ult i16 %l.1, 16383429  %s.1 = select i1 %cmp.1, i16 %l.1, i16 %x430  store i16 %s.1, ptr %gep.1, align 2431 432  %gep.2 = getelementptr inbounds i16, ptr %ptr, i16 2433  %l.2 = load i16, ptr %gep.2434  %cmp.2 = icmp ult i16 %l.2, 16383435  %s.2 = select i1 %cmp.2, i16 %l.2, i16 %x436  store i16 %s.2, ptr %gep.2, align 2437 438  %gep.3 = getelementptr inbounds i16, ptr %ptr, i16 3439  %l.3 = load i16, ptr %gep.3440  %cmp.3 = icmp ult i16 %l.3, 16383441  %s.3 = select i1 %cmp.3, i16 %l.3, i16 %x442  store i16 %s.3, ptr %gep.3, align 2443 444  %gep.4 = getelementptr inbounds i16, ptr %ptr, i16 4445  %l.4 = load i16, ptr %gep.4446  %cmp.4 = icmp ult i16 %l.4, 16383447  %s.4 = select i1 %cmp.4, i16 %l.4, i16 %x448  store i16 %s.4, ptr %gep.4, align 2449 450  %gep.5 = getelementptr inbounds i16, ptr %ptr, i16 5451  %l.5 = load i16, ptr %gep.5452  %cmp.5 = icmp ult i16 %l.5, 16383453  %s.5 = select i1 %cmp.5, i16 %l.5, i16 %x454  store i16 %s.5, ptr %gep.5, align 2455 456  %gep.6 = getelementptr inbounds i16, ptr %ptr, i16 6457  %l.6 = load i16, ptr %gep.6458  %cmp.6 = icmp ult i16 %l.6, 16383459  %s.6 = select i1 %cmp.6, i16 %l.6, i16 %x460  store i16 %s.6, ptr %gep.6, align 2461 462  %gep.7 = getelementptr inbounds i16, ptr %ptr, i16 7463  %l.7 = load i16, ptr %gep.7464  %cmp.7 = icmp ult i16 %l.7, 16383465  %s.7 = select i1 %cmp.7, i16 %l.7, i16 %x466  store i16 %s.7, ptr %gep.7, align 2467  ret void468}469 470define void @select_uniform_eq_2xi32(ptr %ptr, i32 %x) {471; CHECK-LABEL: @select_uniform_eq_2xi32(472; CHECK-NEXT:  entry:473; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i32>, ptr [[PTR:%.*]], align 4474; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <2 x i32> [[TMP0]], splat (i32 16383)475; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x i32> poison, i32 [[X:%.*]], i32 0476; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <2 x i32> [[TMP2]], <2 x i32> poison, <2 x i32> zeroinitializer477; CHECK-NEXT:    [[TMP4:%.*]] = select <2 x i1> [[TMP1]], <2 x i32> [[TMP0]], <2 x i32> [[TMP3]]478; CHECK-NEXT:    store <2 x i32> [[TMP4]], ptr [[PTR]], align 2479; CHECK-NEXT:    ret void480;481entry:482  %l.0 = load i32, ptr %ptr483  %cmp.0 = icmp eq i32 %l.0, 16383484  %s.0 = select i1 %cmp.0, i32 %l.0, i32 %x485  store i32 %s.0, ptr %ptr, align 2486 487  %gep.1 = getelementptr inbounds i32, ptr %ptr, i32 1488  %l.1 = load i32, ptr %gep.1489  %cmp.1 = icmp eq i32 %l.1, 16383490  %s.1 = select i1 %cmp.1, i32 %l.1, i32 %x491  store i32 %s.1, ptr %gep.1, align 2492 493  ret void494}495 496define void @select_uniform_eq_4xi32(ptr %ptr, i32 %x) {497; CHECK-LABEL: @select_uniform_eq_4xi32(498; CHECK-NEXT:  entry:499; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i32>, ptr [[PTR:%.*]], align 4500; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <4 x i32> [[TMP0]], splat (i32 16383)501; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <4 x i32> poison, i32 [[X:%.*]], i32 0502; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <4 x i32> zeroinitializer503; CHECK-NEXT:    [[TMP4:%.*]] = select <4 x i1> [[TMP1]], <4 x i32> [[TMP0]], <4 x i32> [[TMP3]]504; CHECK-NEXT:    store <4 x i32> [[TMP4]], ptr [[PTR]], align 2505; CHECK-NEXT:    ret void506;507entry:508  %l.0 = load i32, ptr %ptr509  %cmp.0 = icmp eq i32 %l.0, 16383510  %s.0 = select i1 %cmp.0, i32 %l.0, i32 %x511  store i32 %s.0, ptr %ptr, align 2512 513  %gep.1 = getelementptr inbounds i32, ptr %ptr, i32 1514  %l.1 = load i32, ptr %gep.1515  %cmp.1 = icmp eq i32 %l.1, 16383516  %s.1 = select i1 %cmp.1, i32 %l.1, i32 %x517  store i32 %s.1, ptr %gep.1, align 2518 519  %gep.2 = getelementptr inbounds i32, ptr %ptr, i32 2520  %l.2 = load i32, ptr %gep.2521  %cmp.2 = icmp eq i32 %l.2, 16383522  %s.2 = select i1 %cmp.2, i32 %l.2, i32 %x523  store i32 %s.2, ptr %gep.2, align 2524 525  %gep.3 = getelementptr inbounds i32, ptr %ptr, i32 3526  %l.3 = load i32, ptr %gep.3527  %cmp.3 = icmp eq i32 %l.3, 16383528  %s.3 = select i1 %cmp.3, i32 %l.3, i32 %x529  store i32 %s.3, ptr %gep.3, align 2530  ret void531}532 533define void @select_uniform_ne_2xi64(ptr %ptr, i64 %x) {534; CHECK-LABEL: @select_uniform_ne_2xi64(535; CHECK-NEXT:  entry:536; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr [[PTR:%.*]], align 8537; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne <2 x i64> [[TMP0]], splat (i64 16383)538; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x i64> poison, i64 [[X:%.*]], i32 0539; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <2 x i64> [[TMP2]], <2 x i64> poison, <2 x i32> zeroinitializer540; CHECK-NEXT:    [[TMP4:%.*]] = select <2 x i1> [[TMP1]], <2 x i64> [[TMP0]], <2 x i64> [[TMP3]]541; CHECK-NEXT:    store <2 x i64> [[TMP4]], ptr [[PTR]], align 2542; CHECK-NEXT:    ret void543;544entry:545  %l.0 = load i64, ptr %ptr546  %cmp.0 = icmp ne i64 %l.0, 16383547  %s.0 = select i1 %cmp.0, i64 %l.0, i64 %x548  store i64 %s.0, ptr %ptr, align 2549 550  %gep.1 = getelementptr inbounds i64, ptr %ptr, i64 1551  %l.1 = load i64, ptr %gep.1552  %cmp.1 = icmp ne i64 %l.1, 16383553  %s.1 = select i1 %cmp.1, i64 %l.1, i64 %x554  store i64 %s.1, ptr %gep.1, align 2555 556  ret void557}558