19ba918ddSPhilip Reames; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 274f985b7SLuke Lau; RUN: llc -mtriple=riscv32 -mattr=+d,+v -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV32 %s 374f985b7SLuke Lau; RUN: llc -mtriple=riscv64 -mattr=+d,+v -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV64 %s 49ba918ddSPhilip Reames 59ba918ddSPhilip Reamesdefine void @combine_zero_stores_2xi8(ptr %p) { 69ba918ddSPhilip Reames; CHECK-LABEL: combine_zero_stores_2xi8: 79ba918ddSPhilip Reames; CHECK: # %bb.0: 89ba918ddSPhilip Reames; CHECK-NEXT: sh zero, 0(a0) 99ba918ddSPhilip Reames; CHECK-NEXT: ret 106c59f399SPhilip Reames store i8 zeroinitializer, ptr %p, align 2 119ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 1 129ba918ddSPhilip Reames store i8 zeroinitializer, ptr %gep 139ba918ddSPhilip Reames ret void 149ba918ddSPhilip Reames} 159ba918ddSPhilip Reames 166c59f399SPhilip Reamesdefine void @combine_zero_stores_4xi8(ptr %p) { 176c59f399SPhilip Reames; CHECK-LABEL: combine_zero_stores_4xi8: 186c59f399SPhilip Reames; CHECK: # %bb.0: 196c59f399SPhilip Reames; CHECK-NEXT: sw zero, 0(a0) 206c59f399SPhilip Reames; CHECK-NEXT: ret 216c59f399SPhilip Reames store i8 zeroinitializer, ptr %p, align 4 226c59f399SPhilip Reames %gep1 = getelementptr i8, ptr %p, i64 1 236c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep1 246c59f399SPhilip Reames %gep2 = getelementptr i8, ptr %p, i64 2 256c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep2 266c59f399SPhilip Reames %gep3 = getelementptr i8, ptr %p, i64 3 276c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep3 286c59f399SPhilip Reames ret void 296c59f399SPhilip Reames} 306c59f399SPhilip Reames 316c59f399SPhilip Reamesdefine void @combine_zero_stores_8xi8(ptr %p) { 326c59f399SPhilip Reames; RV32-LABEL: combine_zero_stores_8xi8: 336c59f399SPhilip Reames; RV32: # %bb.0: 340457f506SPhilip Reames; RV32-NEXT: sw zero, 0(a0) 350457f506SPhilip Reames; RV32-NEXT: sw zero, 4(a0) 366c59f399SPhilip Reames; RV32-NEXT: ret 376c59f399SPhilip Reames; 386c59f399SPhilip Reames; RV64-LABEL: combine_zero_stores_8xi8: 396c59f399SPhilip Reames; RV64: # %bb.0: 406c59f399SPhilip Reames; RV64-NEXT: sd zero, 0(a0) 416c59f399SPhilip Reames; RV64-NEXT: ret 426c59f399SPhilip Reames store i8 zeroinitializer, ptr %p, align 8 436c59f399SPhilip Reames %gep1 = getelementptr i8, ptr %p, i64 1 446c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep1 456c59f399SPhilip Reames %gep2 = getelementptr i8, ptr %p, i64 2 466c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep2 476c59f399SPhilip Reames %gep3 = getelementptr i8, ptr %p, i64 3 486c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep3 496c59f399SPhilip Reames %gep4 = getelementptr i8, ptr %p, i64 4 506c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep4, align 8 516c59f399SPhilip Reames %gep5 = getelementptr i8, ptr %p, i64 5 526c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep5 536c59f399SPhilip Reames %gep6 = getelementptr i8, ptr %p, i64 6 546c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep6 556c59f399SPhilip Reames %gep7 = getelementptr i8, ptr %p, i64 7 566c59f399SPhilip Reames store i8 zeroinitializer, ptr %gep7 576c59f399SPhilip Reames ret void 586c59f399SPhilip Reames} 596c59f399SPhilip Reames 609ba918ddSPhilip Reamesdefine void @combine_zero_stores_2xi16(ptr %p) { 619ba918ddSPhilip Reames; CHECK-LABEL: combine_zero_stores_2xi16: 629ba918ddSPhilip Reames; CHECK: # %bb.0: 639ba918ddSPhilip Reames; CHECK-NEXT: sw zero, 0(a0) 649ba918ddSPhilip Reames; CHECK-NEXT: ret 659ba918ddSPhilip Reames store i16 zeroinitializer, ptr %p, align 4 669ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 2 679ba918ddSPhilip Reames store i16 zeroinitializer, ptr %gep 689ba918ddSPhilip Reames ret void 699ba918ddSPhilip Reames} 709ba918ddSPhilip Reames 716c59f399SPhilip Reamesdefine void @combine_zero_stores_4xi16(ptr %p) { 726c59f399SPhilip Reames; RV32-LABEL: combine_zero_stores_4xi16: 736c59f399SPhilip Reames; RV32: # %bb.0: 740457f506SPhilip Reames; RV32-NEXT: sw zero, 0(a0) 750457f506SPhilip Reames; RV32-NEXT: sw zero, 4(a0) 766c59f399SPhilip Reames; RV32-NEXT: ret 776c59f399SPhilip Reames; 786c59f399SPhilip Reames; RV64-LABEL: combine_zero_stores_4xi16: 796c59f399SPhilip Reames; RV64: # %bb.0: 806c59f399SPhilip Reames; RV64-NEXT: sd zero, 0(a0) 816c59f399SPhilip Reames; RV64-NEXT: ret 826c59f399SPhilip Reames store i16 zeroinitializer, ptr %p, align 8 836c59f399SPhilip Reames %gep1 = getelementptr i16, ptr %p, i64 1 846c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep1 856c59f399SPhilip Reames %gep2 = getelementptr i16, ptr %p, i64 2 866c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep2, align 4 876c59f399SPhilip Reames %gep3 = getelementptr i16, ptr %p, i64 3 886c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep3 896c59f399SPhilip Reames ret void 906c59f399SPhilip Reames} 916c59f399SPhilip Reames 926c59f399SPhilip Reamesdefine void @combine_zero_stores_8xi16(ptr %p) { 936c59f399SPhilip Reames; RV32-LABEL: combine_zero_stores_8xi16: 946c59f399SPhilip Reames; RV32: # %bb.0: 956c59f399SPhilip Reames; RV32-NEXT: sw zero, 0(a0) 966c59f399SPhilip Reames; RV32-NEXT: sh zero, 4(a0) 976c59f399SPhilip Reames; RV32-NEXT: sh zero, 6(a0) 986c59f399SPhilip Reames; RV32-NEXT: sw zero, 8(a0) 996c59f399SPhilip Reames; RV32-NEXT: sh zero, 12(a0) 1006c59f399SPhilip Reames; RV32-NEXT: sh zero, 14(a0) 1016c59f399SPhilip Reames; RV32-NEXT: ret 1026c59f399SPhilip Reames; 1036c59f399SPhilip Reames; RV64-LABEL: combine_zero_stores_8xi16: 1046c59f399SPhilip Reames; RV64: # %bb.0: 1050457f506SPhilip Reames; RV64-NEXT: sd zero, 0(a0) 1060457f506SPhilip Reames; RV64-NEXT: sd zero, 8(a0) 1076c59f399SPhilip Reames; RV64-NEXT: ret 1086c59f399SPhilip Reames store i16 zeroinitializer, ptr %p, align 16 1096c59f399SPhilip Reames %gep1 = getelementptr i16, ptr %p, i64 1 1106c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep1 1116c59f399SPhilip Reames %gep2 = getelementptr i16, ptr %p, i64 2 1126c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep2 1136c59f399SPhilip Reames %gep3 = getelementptr i16, ptr %p, i64 3 1146c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep3 1156c59f399SPhilip Reames %gep4 = getelementptr i16, ptr %p, i64 4 1166c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep4, align 8 1176c59f399SPhilip Reames %gep5 = getelementptr i16, ptr %p, i64 5 1186c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep5 1196c59f399SPhilip Reames %gep6 = getelementptr i16, ptr %p, i64 6 1206c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep6 1216c59f399SPhilip Reames %gep7 = getelementptr i16, ptr %p, i64 7 1226c59f399SPhilip Reames store i16 zeroinitializer, ptr %gep7 1236c59f399SPhilip Reames ret void 1246c59f399SPhilip Reames} 1256c59f399SPhilip Reames 1269ba918ddSPhilip Reamesdefine void @combine_zero_stores_2xi32(ptr %p) { 1279ba918ddSPhilip Reames; RV32-LABEL: combine_zero_stores_2xi32: 1289ba918ddSPhilip Reames; RV32: # %bb.0: 1290457f506SPhilip Reames; RV32-NEXT: sw zero, 0(a0) 1300457f506SPhilip Reames; RV32-NEXT: sw zero, 4(a0) 1319ba918ddSPhilip Reames; RV32-NEXT: ret 1329ba918ddSPhilip Reames; 1339ba918ddSPhilip Reames; RV64-LABEL: combine_zero_stores_2xi32: 1349ba918ddSPhilip Reames; RV64: # %bb.0: 1359ba918ddSPhilip Reames; RV64-NEXT: sd zero, 0(a0) 1369ba918ddSPhilip Reames; RV64-NEXT: ret 1379ba918ddSPhilip Reames store i32 zeroinitializer, ptr %p, align 8 1389ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 4 1399ba918ddSPhilip Reames store i32 zeroinitializer, ptr %gep 1409ba918ddSPhilip Reames ret void 1419ba918ddSPhilip Reames} 1429ba918ddSPhilip Reames 1436c59f399SPhilip Reamesdefine void @combine_zero_stores_4xi32(ptr %p) { 1446c59f399SPhilip Reames; RV32-LABEL: combine_zero_stores_4xi32: 1456c59f399SPhilip Reames; RV32: # %bb.0: 1466c59f399SPhilip Reames; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1476c59f399SPhilip Reames; RV32-NEXT: vmv.v.i v8, 0 1486c59f399SPhilip Reames; RV32-NEXT: vse32.v v8, (a0) 1496c59f399SPhilip Reames; RV32-NEXT: ret 1506c59f399SPhilip Reames; 1516c59f399SPhilip Reames; RV64-LABEL: combine_zero_stores_4xi32: 1526c59f399SPhilip Reames; RV64: # %bb.0: 1530457f506SPhilip Reames; RV64-NEXT: sd zero, 0(a0) 1540457f506SPhilip Reames; RV64-NEXT: sd zero, 8(a0) 1556c59f399SPhilip Reames; RV64-NEXT: ret 1566c59f399SPhilip Reames store i32 zeroinitializer, ptr %p, align 16 1576c59f399SPhilip Reames %gep1 = getelementptr i32, ptr %p, i64 1 1586c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep1 1596c59f399SPhilip Reames %gep2 = getelementptr i32, ptr %p, i64 2 1606c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep2, align 8 1616c59f399SPhilip Reames %gep3 = getelementptr i32, ptr %p, i64 3 1626c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep3 1636c59f399SPhilip Reames ret void 1646c59f399SPhilip Reames} 1656c59f399SPhilip Reames 1666c59f399SPhilip Reamesdefine void @combine_zero_stores_8xi32(ptr %p) { 1676c59f399SPhilip Reames; RV32-LABEL: combine_zero_stores_8xi32: 1686c59f399SPhilip Reames; RV32: # %bb.0: 1696c59f399SPhilip Reames; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1706c59f399SPhilip Reames; RV32-NEXT: vmv.v.i v8, 0 1716c59f399SPhilip Reames; RV32-NEXT: vse32.v v8, (a0) 1726c59f399SPhilip Reames; RV32-NEXT: ret 1736c59f399SPhilip Reames; 1746c59f399SPhilip Reames; RV64-LABEL: combine_zero_stores_8xi32: 1756c59f399SPhilip Reames; RV64: # %bb.0: 1766c59f399SPhilip Reames; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1776c59f399SPhilip Reames; RV64-NEXT: vmv.v.i v8, 0 1786c59f399SPhilip Reames; RV64-NEXT: vse64.v v8, (a0) 1796c59f399SPhilip Reames; RV64-NEXT: ret 1806c59f399SPhilip Reames store i32 zeroinitializer, ptr %p, align 32 1816c59f399SPhilip Reames %gep1 = getelementptr i32, ptr %p, i64 1 1826c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep1 1836c59f399SPhilip Reames %gep2 = getelementptr i32, ptr %p, i64 2 1846c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep2, align 8 1856c59f399SPhilip Reames %gep3 = getelementptr i32, ptr %p, i64 3 1866c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep3 1876c59f399SPhilip Reames %gep4 = getelementptr i32, ptr %p, i64 4 1886c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep4, align 8 1896c59f399SPhilip Reames %gep5 = getelementptr i32, ptr %p, i64 5 1906c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep5 1916c59f399SPhilip Reames %gep6 = getelementptr i32, ptr %p, i64 6 1926c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep6, align 8 1936c59f399SPhilip Reames %gep7 = getelementptr i32, ptr %p, i64 7 1946c59f399SPhilip Reames store i32 zeroinitializer, ptr %gep7 1956c59f399SPhilip Reames ret void 1966c59f399SPhilip Reames} 1976c59f399SPhilip Reames 1989ba918ddSPhilip Reamesdefine void @combine_zero_stores_2xi32_unaligned(ptr %p) { 1990457f506SPhilip Reames; CHECK-LABEL: combine_zero_stores_2xi32_unaligned: 2000457f506SPhilip Reames; CHECK: # %bb.0: 2010457f506SPhilip Reames; CHECK-NEXT: sw zero, 0(a0) 2020457f506SPhilip Reames; CHECK-NEXT: sw zero, 4(a0) 2030457f506SPhilip Reames; CHECK-NEXT: ret 2049ba918ddSPhilip Reames store i32 zeroinitializer, ptr %p 2059ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 4 2069ba918ddSPhilip Reames store i32 zeroinitializer, ptr %gep 2079ba918ddSPhilip Reames ret void 2089ba918ddSPhilip Reames} 2099ba918ddSPhilip Reames 2109ba918ddSPhilip Reamesdefine void @combine_zero_stores_2xi64(ptr %p) { 2119ba918ddSPhilip Reames; RV32-LABEL: combine_zero_stores_2xi64: 2129ba918ddSPhilip Reames; RV32: # %bb.0: 2139ba918ddSPhilip Reames; RV32-NEXT: sw zero, 0(a0) 214*2967e5f8SAlex Bradbury; RV32-NEXT: sw zero, 4(a0) 2159ba918ddSPhilip Reames; RV32-NEXT: sw zero, 8(a0) 216*2967e5f8SAlex Bradbury; RV32-NEXT: sw zero, 12(a0) 2179ba918ddSPhilip Reames; RV32-NEXT: ret 2189ba918ddSPhilip Reames; 2199ba918ddSPhilip Reames; RV64-LABEL: combine_zero_stores_2xi64: 2209ba918ddSPhilip Reames; RV64: # %bb.0: 2210457f506SPhilip Reames; RV64-NEXT: sd zero, 0(a0) 2220457f506SPhilip Reames; RV64-NEXT: sd zero, 8(a0) 2239ba918ddSPhilip Reames; RV64-NEXT: ret 2249ba918ddSPhilip Reames store i64 zeroinitializer, ptr %p 2259ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 8 2269ba918ddSPhilip Reames store i64 zeroinitializer, ptr %gep 2279ba918ddSPhilip Reames ret void 2289ba918ddSPhilip Reames} 2299ba918ddSPhilip Reames 2309ba918ddSPhilip Reamesdefine void @combine_fp_zero_stores_crash(ptr %ptr) { 2319ba918ddSPhilip Reames; CHECK-LABEL: combine_fp_zero_stores_crash: 2329ba918ddSPhilip Reames; CHECK: # %bb.0: 2330457f506SPhilip Reames; CHECK-NEXT: sw zero, 4(a0) 2340457f506SPhilip Reames; CHECK-NEXT: sw zero, 8(a0) 2359ba918ddSPhilip Reames; CHECK-NEXT: ret 2369ba918ddSPhilip Reames %addr1 = getelementptr float, ptr %ptr, i64 1 2379ba918ddSPhilip Reames %addr2 = getelementptr float, ptr %ptr, i64 2 2389ba918ddSPhilip Reames store float 0.000000e+00, ptr %addr1, align 4 2399ba918ddSPhilip Reames store float 0.000000e+00, ptr %addr2, align 4 2409ba918ddSPhilip Reames ret void 2419ba918ddSPhilip Reames} 2429ba918ddSPhilip Reames 2439ba918ddSPhilip Reamesdefine void @combine_allones_stores_2xi8(ptr %p) { 2449ba918ddSPhilip Reames; CHECK-LABEL: combine_allones_stores_2xi8: 2459ba918ddSPhilip Reames; CHECK: # %bb.0: 2469ba918ddSPhilip Reames; CHECK-NEXT: li a1, -1 2479ba918ddSPhilip Reames; CHECK-NEXT: sh a1, 0(a0) 2489ba918ddSPhilip Reames; CHECK-NEXT: ret 2499ba918ddSPhilip Reames store i8 -1, ptr %p, align 4 2509ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 1 2519ba918ddSPhilip Reames store i8 -1, ptr %gep 2529ba918ddSPhilip Reames ret void 2539ba918ddSPhilip Reames} 2549ba918ddSPhilip Reames 2559ba918ddSPhilip Reamesdefine void @combine_allones_stores_2xi16(ptr %p) { 2569ba918ddSPhilip Reames; CHECK-LABEL: combine_allones_stores_2xi16: 2579ba918ddSPhilip Reames; CHECK: # %bb.0: 2589ba918ddSPhilip Reames; CHECK-NEXT: li a1, -1 2599ba918ddSPhilip Reames; CHECK-NEXT: sw a1, 0(a0) 2609ba918ddSPhilip Reames; CHECK-NEXT: ret 2619ba918ddSPhilip Reames store i16 -1, ptr %p, align 4 2629ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 2 2639ba918ddSPhilip Reames store i16 -1, ptr %gep 2649ba918ddSPhilip Reames ret void 2659ba918ddSPhilip Reames} 2669ba918ddSPhilip Reames 2679ba918ddSPhilip Reamesdefine void @combine_allones_stores_2xi32(ptr %p) { 2689ba918ddSPhilip Reames; RV32-LABEL: combine_allones_stores_2xi32: 2699ba918ddSPhilip Reames; RV32: # %bb.0: 2709ba918ddSPhilip Reames; RV32-NEXT: li a1, -1 2719ba918ddSPhilip Reames; RV32-NEXT: sw a1, 0(a0) 2729ba918ddSPhilip Reames; RV32-NEXT: sw a1, 4(a0) 2739ba918ddSPhilip Reames; RV32-NEXT: ret 2749ba918ddSPhilip Reames; 2759ba918ddSPhilip Reames; RV64-LABEL: combine_allones_stores_2xi32: 2769ba918ddSPhilip Reames; RV64: # %bb.0: 2779ba918ddSPhilip Reames; RV64-NEXT: li a1, -1 2789ba918ddSPhilip Reames; RV64-NEXT: sd a1, 0(a0) 2799ba918ddSPhilip Reames; RV64-NEXT: ret 2809ba918ddSPhilip Reames store i32 -1, ptr %p, align 8 2819ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 4 2829ba918ddSPhilip Reames store i32 -1, ptr %gep 2839ba918ddSPhilip Reames ret void 2849ba918ddSPhilip Reames} 2859ba918ddSPhilip Reames 2869ba918ddSPhilip Reamesdefine void @combine_allones_stores_2xi32_unaligned(ptr %p) { 2879ba918ddSPhilip Reames; CHECK-LABEL: combine_allones_stores_2xi32_unaligned: 2889ba918ddSPhilip Reames; CHECK: # %bb.0: 2899ba918ddSPhilip Reames; CHECK-NEXT: li a1, -1 2909ba918ddSPhilip Reames; CHECK-NEXT: sw a1, 0(a0) 2919ba918ddSPhilip Reames; CHECK-NEXT: sw a1, 4(a0) 2929ba918ddSPhilip Reames; CHECK-NEXT: ret 2939ba918ddSPhilip Reames store i32 -1, ptr %p 2949ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 4 2959ba918ddSPhilip Reames store i32 -1, ptr %gep 2969ba918ddSPhilip Reames ret void 2979ba918ddSPhilip Reames} 2989ba918ddSPhilip Reames 2999ba918ddSPhilip Reamesdefine void @combine_allones_stores_2xi64(ptr %p) { 3009ba918ddSPhilip Reames; RV32-LABEL: combine_allones_stores_2xi64: 3019ba918ddSPhilip Reames; RV32: # %bb.0: 3029ba918ddSPhilip Reames; RV32-NEXT: li a1, -1 3039ba918ddSPhilip Reames; RV32-NEXT: sw a1, 0(a0) 304*2967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 4(a0) 3059ba918ddSPhilip Reames; RV32-NEXT: sw a1, 8(a0) 306*2967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(a0) 3079ba918ddSPhilip Reames; RV32-NEXT: ret 3089ba918ddSPhilip Reames; 3099ba918ddSPhilip Reames; RV64-LABEL: combine_allones_stores_2xi64: 3109ba918ddSPhilip Reames; RV64: # %bb.0: 3119ba918ddSPhilip Reames; RV64-NEXT: li a1, -1 3129ba918ddSPhilip Reames; RV64-NEXT: sd a1, 0(a0) 3139ba918ddSPhilip Reames; RV64-NEXT: sd a1, 8(a0) 3149ba918ddSPhilip Reames; RV64-NEXT: ret 3159ba918ddSPhilip Reames store i64 -1, ptr %p 3169ba918ddSPhilip Reames %gep = getelementptr i8, ptr %p, i64 8 3179ba918ddSPhilip Reames store i64 -1, ptr %gep 3189ba918ddSPhilip Reames ret void 3199ba918ddSPhilip Reames} 320