19855fe45SBen Shi; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 29855fe45SBen Shi; RUN: opt < %s -passes=slp-vectorizer -mtriple=riscv64 -mattr=+v \ 39855fe45SBen Shi; RUN: -riscv-v-vector-bits-min=-1 -riscv-v-slp-max-vf=0 -S | FileCheck %s --check-prefixes=CHECK 49855fe45SBen Shi; RUN: opt < %s -passes=slp-vectorizer -mtriple=riscv64 -mattr=+v -S | FileCheck %s --check-prefixes=DEFAULT 59855fe45SBen Shi 69855fe45SBen Shidefine void @vec_add(ptr %dest, ptr %p) { 79855fe45SBen Shi; CHECK-LABEL: @vec_add( 89855fe45SBen Shi; CHECK-NEXT: entry: 99855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 10*38fffa63SPaul Walker; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i16> [[TMP0]], splat (i16 1) 119855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 129855fe45SBen Shi; CHECK-NEXT: ret void 139855fe45SBen Shi; 149855fe45SBen Shi; DEFAULT-LABEL: @vec_add( 159855fe45SBen Shi; DEFAULT-NEXT: entry: 167f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 17*38fffa63SPaul Walker; DEFAULT-NEXT: [[TMP1:%.*]] = add <2 x i16> [[TMP0]], splat (i16 1) 187f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 199855fe45SBen Shi; DEFAULT-NEXT: ret void 209855fe45SBen Shi; 219855fe45SBen Shientry: 229855fe45SBen Shi %e0 = load i16, ptr %p, align 4 239855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 249855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 259855fe45SBen Shi 269855fe45SBen Shi %a0 = add i16 %e0, 1 279855fe45SBen Shi %a1 = add i16 %e1, 1 289855fe45SBen Shi 299855fe45SBen Shi store i16 %a0, ptr %dest, align 4 309855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 319855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 329855fe45SBen Shi ret void 339855fe45SBen Shi} 349855fe45SBen Shi 359855fe45SBen Shidefine void @vec_sub(ptr %dest, ptr %p) { 369855fe45SBen Shi; CHECK-LABEL: @vec_sub( 379855fe45SBen Shi; CHECK-NEXT: entry: 389855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 39*38fffa63SPaul Walker; CHECK-NEXT: [[TMP1:%.*]] = sub <2 x i16> [[TMP0]], splat (i16 17) 409855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 419855fe45SBen Shi; CHECK-NEXT: ret void 429855fe45SBen Shi; 439855fe45SBen Shi; DEFAULT-LABEL: @vec_sub( 449855fe45SBen Shi; DEFAULT-NEXT: entry: 457f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 46*38fffa63SPaul Walker; DEFAULT-NEXT: [[TMP1:%.*]] = sub <2 x i16> [[TMP0]], splat (i16 17) 477f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 489855fe45SBen Shi; DEFAULT-NEXT: ret void 499855fe45SBen Shi; 509855fe45SBen Shientry: 519855fe45SBen Shi %e0 = load i16, ptr %p, align 4 529855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 539855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 549855fe45SBen Shi 559855fe45SBen Shi %a0 = sub i16 %e0, 17 569855fe45SBen Shi %a1 = sub i16 %e1, 17 579855fe45SBen Shi 589855fe45SBen Shi store i16 %a0, ptr %dest, align 4 599855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 609855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 619855fe45SBen Shi ret void 629855fe45SBen Shi} 639855fe45SBen Shi 649855fe45SBen Shidefine void @vec_rsub(ptr %dest, ptr %p) { 659855fe45SBen Shi; CHECK-LABEL: @vec_rsub( 669855fe45SBen Shi; CHECK-NEXT: entry: 679855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 68*38fffa63SPaul Walker; CHECK-NEXT: [[TMP1:%.*]] = sub <2 x i16> splat (i16 29), [[TMP0]] 699855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 709855fe45SBen Shi; CHECK-NEXT: ret void 719855fe45SBen Shi; 729855fe45SBen Shi; DEFAULT-LABEL: @vec_rsub( 739855fe45SBen Shi; DEFAULT-NEXT: entry: 747f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 75*38fffa63SPaul Walker; DEFAULT-NEXT: [[TMP1:%.*]] = sub <2 x i16> splat (i16 29), [[TMP0]] 767f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 779855fe45SBen Shi; DEFAULT-NEXT: ret void 789855fe45SBen Shi; 799855fe45SBen Shientry: 809855fe45SBen Shi %e0 = load i16, ptr %p, align 4 819855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 829855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 839855fe45SBen Shi 849855fe45SBen Shi %a0 = sub i16 29, %e0 859855fe45SBen Shi %a1 = sub i16 29, %e1 869855fe45SBen Shi 879855fe45SBen Shi store i16 %a0, ptr %dest, align 4 889855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 899855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 909855fe45SBen Shi ret void 919855fe45SBen Shi} 929855fe45SBen Shi 939855fe45SBen Shidefine void @vec_mul(ptr %dest, ptr %p) { 949855fe45SBen Shi; CHECK-LABEL: @vec_mul( 959855fe45SBen Shi; CHECK-NEXT: entry: 969855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 97*38fffa63SPaul Walker; CHECK-NEXT: [[TMP1:%.*]] = mul <2 x i16> [[TMP0]], splat (i16 7) 989855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 999855fe45SBen Shi; CHECK-NEXT: ret void 1009855fe45SBen Shi; 1019855fe45SBen Shi; DEFAULT-LABEL: @vec_mul( 1029855fe45SBen Shi; DEFAULT-NEXT: entry: 1037f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 104*38fffa63SPaul Walker; DEFAULT-NEXT: [[TMP1:%.*]] = mul <2 x i16> [[TMP0]], splat (i16 7) 1057f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 1069855fe45SBen Shi; DEFAULT-NEXT: ret void 1079855fe45SBen Shi; 1089855fe45SBen Shientry: 1099855fe45SBen Shi %e0 = load i16, ptr %p, align 4 1109855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 1119855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 1129855fe45SBen Shi 1139855fe45SBen Shi %a0 = mul i16 %e0, 7 1149855fe45SBen Shi %a1 = mul i16 %e1, 7 1159855fe45SBen Shi 1169855fe45SBen Shi store i16 %a0, ptr %dest, align 4 1179855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 1189855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 1199855fe45SBen Shi ret void 1209855fe45SBen Shi} 1219855fe45SBen Shi 1229855fe45SBen Shidefine void @vec_sdiv(ptr %dest, ptr %p) { 1239855fe45SBen Shi; CHECK-LABEL: @vec_sdiv( 1249855fe45SBen Shi; CHECK-NEXT: entry: 1259855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 126*38fffa63SPaul Walker; CHECK-NEXT: [[TMP1:%.*]] = sdiv <2 x i16> [[TMP0]], splat (i16 7) 1279855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 1289855fe45SBen Shi; CHECK-NEXT: ret void 1299855fe45SBen Shi; 1309855fe45SBen Shi; DEFAULT-LABEL: @vec_sdiv( 1319855fe45SBen Shi; DEFAULT-NEXT: entry: 1327f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 133*38fffa63SPaul Walker; DEFAULT-NEXT: [[TMP1:%.*]] = sdiv <2 x i16> [[TMP0]], splat (i16 7) 1347f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 4 1359855fe45SBen Shi; DEFAULT-NEXT: ret void 1369855fe45SBen Shi; 1379855fe45SBen Shientry: 1389855fe45SBen Shi %e0 = load i16, ptr %p, align 4 1399855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 1409855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 1419855fe45SBen Shi 1429855fe45SBen Shi %a0 = sdiv i16 %e0, 7 1439855fe45SBen Shi %a1 = sdiv i16 %e1, 7 1449855fe45SBen Shi 1459855fe45SBen Shi store i16 %a0, ptr %dest, align 4 1469855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 1479855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 1489855fe45SBen Shi ret void 1499855fe45SBen Shi} 1509855fe45SBen Shi 1519855fe45SBen Shidefine void @vec_and(ptr %dest, ptr %p, ptr %q) { 1529855fe45SBen Shi; CHECK-LABEL: @vec_and( 1539855fe45SBen Shi; CHECK-NEXT: entry: 1549855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 1559855fe45SBen Shi; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 1569855fe45SBen Shi; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i16> [[TMP0]], [[TMP1]] 1579855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 1589855fe45SBen Shi; CHECK-NEXT: ret void 1599855fe45SBen Shi; 1609855fe45SBen Shi; DEFAULT-LABEL: @vec_and( 1619855fe45SBen Shi; DEFAULT-NEXT: entry: 1627f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 1637f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 1647f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP2:%.*]] = and <2 x i16> [[TMP0]], [[TMP1]] 1657f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 1669855fe45SBen Shi; DEFAULT-NEXT: ret void 1679855fe45SBen Shi; 1689855fe45SBen Shientry: 1699855fe45SBen Shi %e0 = load i16, ptr %p, align 4 1709855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 1719855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 1729855fe45SBen Shi 1739855fe45SBen Shi %f0 = load i16, ptr %q, align 4 1749855fe45SBen Shi %inq = getelementptr inbounds i16, ptr %q, i64 1 1759855fe45SBen Shi %f1 = load i16, ptr %inq, align 2 1769855fe45SBen Shi 1779855fe45SBen Shi %a0 = and i16 %e0, %f0 1789855fe45SBen Shi %a1 = and i16 %e1, %f1 1799855fe45SBen Shi 1809855fe45SBen Shi store i16 %a0, ptr %dest, align 4 1819855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 1829855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 1839855fe45SBen Shi ret void 1849855fe45SBen Shi} 1859855fe45SBen Shi 1869855fe45SBen Shidefine void @vec_or(ptr %dest, ptr %p, ptr %q) { 1879855fe45SBen Shi; CHECK-LABEL: @vec_or( 1889855fe45SBen Shi; CHECK-NEXT: entry: 1899855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 1909855fe45SBen Shi; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 1919855fe45SBen Shi; CHECK-NEXT: [[TMP2:%.*]] = or <2 x i16> [[TMP0]], [[TMP1]] 1929855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 1939855fe45SBen Shi; CHECK-NEXT: ret void 1949855fe45SBen Shi; 1959855fe45SBen Shi; DEFAULT-LABEL: @vec_or( 1969855fe45SBen Shi; DEFAULT-NEXT: entry: 1977f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 1987f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 1997f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP2:%.*]] = or <2 x i16> [[TMP0]], [[TMP1]] 2007f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 2019855fe45SBen Shi; DEFAULT-NEXT: ret void 2029855fe45SBen Shi; 2039855fe45SBen Shientry: 2049855fe45SBen Shi %e0 = load i16, ptr %p, align 4 2059855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 2069855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 2079855fe45SBen Shi 2089855fe45SBen Shi %f0 = load i16, ptr %q, align 4 2099855fe45SBen Shi %inq = getelementptr inbounds i16, ptr %q, i64 1 2109855fe45SBen Shi %f1 = load i16, ptr %inq, align 2 2119855fe45SBen Shi 2129855fe45SBen Shi %a0 = or i16 %e0, %f0 2139855fe45SBen Shi %a1 = or i16 %e1, %f1 2149855fe45SBen Shi 2159855fe45SBen Shi store i16 %a0, ptr %dest, align 4 2169855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 2179855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 2189855fe45SBen Shi ret void 2199855fe45SBen Shi} 2209855fe45SBen Shi 2219855fe45SBen Shidefine void @vec_sll(ptr %dest, ptr %p, ptr %q) { 2229855fe45SBen Shi; CHECK-LABEL: @vec_sll( 2239855fe45SBen Shi; CHECK-NEXT: entry: 2249855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 2259855fe45SBen Shi; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 2269855fe45SBen Shi; CHECK-NEXT: [[TMP2:%.*]] = shl <2 x i16> [[TMP0]], [[TMP1]] 2279855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 2289855fe45SBen Shi; CHECK-NEXT: ret void 2299855fe45SBen Shi; 2309855fe45SBen Shi; DEFAULT-LABEL: @vec_sll( 2319855fe45SBen Shi; DEFAULT-NEXT: entry: 2327f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 2337f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 2347f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP2:%.*]] = shl <2 x i16> [[TMP0]], [[TMP1]] 2357f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 2369855fe45SBen Shi; DEFAULT-NEXT: ret void 2379855fe45SBen Shi; 2389855fe45SBen Shientry: 2399855fe45SBen Shi %e0 = load i16, ptr %p, align 4 2409855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 2419855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 2429855fe45SBen Shi 2439855fe45SBen Shi %f0 = load i16, ptr %q, align 4 2449855fe45SBen Shi %inq = getelementptr inbounds i16, ptr %q, i64 1 2459855fe45SBen Shi %f1 = load i16, ptr %inq, align 2 2469855fe45SBen Shi 2479855fe45SBen Shi %a0 = shl i16 %e0, %f0 2489855fe45SBen Shi %a1 = shl i16 %e1, %f1 2499855fe45SBen Shi 2509855fe45SBen Shi store i16 %a0, ptr %dest, align 4 2519855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 2529855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 2539855fe45SBen Shi ret void 2549855fe45SBen Shi} 2559855fe45SBen Shi 2569855fe45SBen Shideclare i16 @llvm.smin.i16(i16, i16) 2579855fe45SBen Shidefine void @vec_smin(ptr %dest, ptr %p, ptr %q) { 2589855fe45SBen Shi; CHECK-LABEL: @vec_smin( 2599855fe45SBen Shi; CHECK-NEXT: entry: 2609855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 2619855fe45SBen Shi; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 2629855fe45SBen Shi; CHECK-NEXT: [[TMP2:%.*]] = call <2 x i16> @llvm.smin.v2i16(<2 x i16> [[TMP0]], <2 x i16> [[TMP1]]) 2639855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 2649855fe45SBen Shi; CHECK-NEXT: ret void 2659855fe45SBen Shi; 2669855fe45SBen Shi; DEFAULT-LABEL: @vec_smin( 2679855fe45SBen Shi; DEFAULT-NEXT: entry: 2687f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 2697f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 2707f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP2:%.*]] = call <2 x i16> @llvm.smin.v2i16(<2 x i16> [[TMP0]], <2 x i16> [[TMP1]]) 2717f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 2729855fe45SBen Shi; DEFAULT-NEXT: ret void 2739855fe45SBen Shi; 2749855fe45SBen Shientry: 2759855fe45SBen Shi %e0 = load i16, ptr %p, align 4 2769855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 2779855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 2789855fe45SBen Shi 2799855fe45SBen Shi %f0 = load i16, ptr %q, align 4 2809855fe45SBen Shi %inq = getelementptr inbounds i16, ptr %q, i64 1 2819855fe45SBen Shi %f1 = load i16, ptr %inq, align 2 2829855fe45SBen Shi 2839855fe45SBen Shi %a0 = tail call i16 @llvm.smin.i16(i16 %e0, i16 %f0) 2849855fe45SBen Shi %a1 = tail call i16 @llvm.smin.i16(i16 %e1, i16 %f1) 2859855fe45SBen Shi 2869855fe45SBen Shi store i16 %a0, ptr %dest, align 4 2879855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 2889855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 2899855fe45SBen Shi ret void 2909855fe45SBen Shi} 2919855fe45SBen Shi 2929855fe45SBen Shideclare i16 @llvm.umax.i16(i16, i16) 2939855fe45SBen Shidefine void @vec_umax(ptr %dest, ptr %p, ptr %q) { 2949855fe45SBen Shi; CHECK-LABEL: @vec_umax( 2959855fe45SBen Shi; CHECK-NEXT: entry: 2969855fe45SBen Shi; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 2979855fe45SBen Shi; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 2989855fe45SBen Shi; CHECK-NEXT: [[TMP2:%.*]] = call <2 x i16> @llvm.umax.v2i16(<2 x i16> [[TMP0]], <2 x i16> [[TMP1]]) 2999855fe45SBen Shi; CHECK-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 3009855fe45SBen Shi; CHECK-NEXT: ret void 3019855fe45SBen Shi; 3029855fe45SBen Shi; DEFAULT-LABEL: @vec_umax( 3039855fe45SBen Shi; DEFAULT-NEXT: entry: 3047f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 4 3057f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[Q:%.*]], align 4 3067f26c27eSPhilip Reames; DEFAULT-NEXT: [[TMP2:%.*]] = call <2 x i16> @llvm.umax.v2i16(<2 x i16> [[TMP0]], <2 x i16> [[TMP1]]) 3077f26c27eSPhilip Reames; DEFAULT-NEXT: store <2 x i16> [[TMP2]], ptr [[DEST:%.*]], align 4 3089855fe45SBen Shi; DEFAULT-NEXT: ret void 3099855fe45SBen Shi; 3109855fe45SBen Shientry: 3119855fe45SBen Shi %e0 = load i16, ptr %p, align 4 3129855fe45SBen Shi %inc = getelementptr inbounds i16, ptr %p, i64 1 3139855fe45SBen Shi %e1 = load i16, ptr %inc, align 2 3149855fe45SBen Shi 3159855fe45SBen Shi %f0 = load i16, ptr %q, align 4 3169855fe45SBen Shi %inq = getelementptr inbounds i16, ptr %q, i64 1 3179855fe45SBen Shi %f1 = load i16, ptr %inq, align 2 3189855fe45SBen Shi 3199855fe45SBen Shi %a0 = tail call i16 @llvm.umax.i16(i16 %e0, i16 %f0) 3209855fe45SBen Shi %a1 = tail call i16 @llvm.umax.i16(i16 %e1, i16 %f1) 3219855fe45SBen Shi 3229855fe45SBen Shi store i16 %a0, ptr %dest, align 4 3239855fe45SBen Shi %inc2 = getelementptr inbounds i16, ptr %dest, i64 1 3249855fe45SBen Shi store i16 %a1, ptr %inc2, align 2 3259855fe45SBen Shi ret void 3269855fe45SBen Shi} 327