11a8abab2SAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 21a8abab2SAlex Bradbury; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ 31a8abab2SAlex Bradbury; RUN: | FileCheck %s -check-prefixes=RV32-RV64,RV32 41a8abab2SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \ 51a8abab2SAlex Bradbury; RUN: | FileCheck %s -check-prefixes=RV32D-RV64D,RV32D 61a8abab2SAlex Bradbury; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \ 71a8abab2SAlex Bradbury; RUN: | FileCheck %s -check-prefixes=RV32-RV64,RV64 81a8abab2SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \ 91a8abab2SAlex Bradbury; RUN: | FileCheck %s -check-prefixes=RV32D-RV64D,RV64D 101a8abab2SAlex Bradbury 111a8abab2SAlex Bradburydefine void @int32_float_pair(i32 %tmp1, float %tmp2, ptr %ref.tmp) { 12ae147546SAlex Bradbury; RV32-RV64-LABEL: int32_float_pair: 13ae147546SAlex Bradbury; RV32-RV64: # %bb.0: 14ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a0, 0(a2) 15ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a1, 4(a2) 16ae147546SAlex Bradbury; RV32-RV64-NEXT: ret 171a8abab2SAlex Bradbury; 18ae147546SAlex Bradbury; RV32D-RV64D-LABEL: int32_float_pair: 19ae147546SAlex Bradbury; RV32D-RV64D: # %bb.0: 20ae147546SAlex Bradbury; RV32D-RV64D-NEXT: sw a0, 0(a1) 21ae147546SAlex Bradbury; RV32D-RV64D-NEXT: fsw fa0, 4(a1) 22ae147546SAlex Bradbury; RV32D-RV64D-NEXT: ret 231a8abab2SAlex Bradbury %t0 = bitcast float %tmp2 to i32 241a8abab2SAlex Bradbury %t1 = zext i32 %t0 to i64 251a8abab2SAlex Bradbury %t2 = shl nuw i64 %t1, 32 261a8abab2SAlex Bradbury %t3 = zext i32 %tmp1 to i64 271a8abab2SAlex Bradbury %t4 = or i64 %t2, %t3 281a8abab2SAlex Bradbury store i64 %t4, ptr %ref.tmp, align 8 291a8abab2SAlex Bradbury ret void 301a8abab2SAlex Bradbury} 311a8abab2SAlex Bradbury 321a8abab2SAlex Bradburydefine void @float_int32_pair(float %tmp1, i32 %tmp2, ptr %ref.tmp) { 33ae147546SAlex Bradbury; RV32-RV64-LABEL: float_int32_pair: 34ae147546SAlex Bradbury; RV32-RV64: # %bb.0: 35ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a0, 0(a2) 36ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a1, 4(a2) 37ae147546SAlex Bradbury; RV32-RV64-NEXT: ret 381a8abab2SAlex Bradbury; 39ae147546SAlex Bradbury; RV32D-RV64D-LABEL: float_int32_pair: 40ae147546SAlex Bradbury; RV32D-RV64D: # %bb.0: 41ae147546SAlex Bradbury; RV32D-RV64D-NEXT: fsw fa0, 0(a1) 42ae147546SAlex Bradbury; RV32D-RV64D-NEXT: sw a0, 4(a1) 43ae147546SAlex Bradbury; RV32D-RV64D-NEXT: ret 441a8abab2SAlex Bradbury %t0 = bitcast float %tmp1 to i32 451a8abab2SAlex Bradbury %t1 = zext i32 %tmp2 to i64 461a8abab2SAlex Bradbury %t2 = shl nuw i64 %t1, 32 471a8abab2SAlex Bradbury %t3 = zext i32 %t0 to i64 481a8abab2SAlex Bradbury %t4 = or i64 %t2, %t3 491a8abab2SAlex Bradbury store i64 %t4, ptr %ref.tmp, align 8 501a8abab2SAlex Bradbury ret void 511a8abab2SAlex Bradbury} 521a8abab2SAlex Bradbury 531a8abab2SAlex Bradburydefine void @int16_float_pair(i16 signext %tmp1, float %tmp2, ptr %ref.tmp) { 541a8abab2SAlex Bradbury; RV32-LABEL: int16_float_pair: 551a8abab2SAlex Bradbury; RV32: # %bb.0: 561a8abab2SAlex Bradbury; RV32-NEXT: slli a0, a0, 16 571a8abab2SAlex Bradbury; RV32-NEXT: srli a0, a0, 16 581a8abab2SAlex Bradbury; RV32-NEXT: sw a0, 0(a2) 59ae147546SAlex Bradbury; RV32-NEXT: sw a1, 4(a2) 601a8abab2SAlex Bradbury; RV32-NEXT: ret 611a8abab2SAlex Bradbury; 621a8abab2SAlex Bradbury; RV32D-LABEL: int16_float_pair: 631a8abab2SAlex Bradbury; RV32D: # %bb.0: 641a8abab2SAlex Bradbury; RV32D-NEXT: slli a0, a0, 16 651a8abab2SAlex Bradbury; RV32D-NEXT: srli a0, a0, 16 661a8abab2SAlex Bradbury; RV32D-NEXT: sw a0, 0(a1) 67ae147546SAlex Bradbury; RV32D-NEXT: fsw fa0, 4(a1) 681a8abab2SAlex Bradbury; RV32D-NEXT: ret 691a8abab2SAlex Bradbury; 701a8abab2SAlex Bradbury; RV64-LABEL: int16_float_pair: 711a8abab2SAlex Bradbury; RV64: # %bb.0: 721a8abab2SAlex Bradbury; RV64-NEXT: slli a0, a0, 48 731a8abab2SAlex Bradbury; RV64-NEXT: srli a0, a0, 48 74ae147546SAlex Bradbury; RV64-NEXT: sw a0, 0(a2) 75ae147546SAlex Bradbury; RV64-NEXT: sw a1, 4(a2) 761a8abab2SAlex Bradbury; RV64-NEXT: ret 771a8abab2SAlex Bradbury; 781a8abab2SAlex Bradbury; RV64D-LABEL: int16_float_pair: 791a8abab2SAlex Bradbury; RV64D: # %bb.0: 801a8abab2SAlex Bradbury; RV64D-NEXT: slli a0, a0, 48 811a8abab2SAlex Bradbury; RV64D-NEXT: srli a0, a0, 48 82ae147546SAlex Bradbury; RV64D-NEXT: sw a0, 0(a1) 83ae147546SAlex Bradbury; RV64D-NEXT: fsw fa0, 4(a1) 841a8abab2SAlex Bradbury; RV64D-NEXT: ret 851a8abab2SAlex Bradbury %t0 = bitcast float %tmp2 to i32 861a8abab2SAlex Bradbury %t1 = zext i32 %t0 to i64 871a8abab2SAlex Bradbury %t2 = shl nuw i64 %t1, 32 881a8abab2SAlex Bradbury %t3 = zext i16 %tmp1 to i64 891a8abab2SAlex Bradbury %t4 = or i64 %t2, %t3 901a8abab2SAlex Bradbury store i64 %t4, ptr %ref.tmp, align 8 911a8abab2SAlex Bradbury ret void 921a8abab2SAlex Bradbury} 931a8abab2SAlex Bradbury 941a8abab2SAlex Bradburydefine void @int8_float_pair(i8 signext %tmp1, float %tmp2, ptr %ref.tmp) { 95ae147546SAlex Bradbury; RV32-RV64-LABEL: int8_float_pair: 96ae147546SAlex Bradbury; RV32-RV64: # %bb.0: 97ae147546SAlex Bradbury; RV32-RV64-NEXT: andi a0, a0, 255 98ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a0, 0(a2) 99ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a1, 4(a2) 100ae147546SAlex Bradbury; RV32-RV64-NEXT: ret 1011a8abab2SAlex Bradbury; 102ae147546SAlex Bradbury; RV32D-RV64D-LABEL: int8_float_pair: 103ae147546SAlex Bradbury; RV32D-RV64D: # %bb.0: 104ae147546SAlex Bradbury; RV32D-RV64D-NEXT: andi a0, a0, 255 105ae147546SAlex Bradbury; RV32D-RV64D-NEXT: sw a0, 0(a1) 106ae147546SAlex Bradbury; RV32D-RV64D-NEXT: fsw fa0, 4(a1) 107ae147546SAlex Bradbury; RV32D-RV64D-NEXT: ret 1081a8abab2SAlex Bradbury %t0 = bitcast float %tmp2 to i32 1091a8abab2SAlex Bradbury %t1 = zext i32 %t0 to i64 1101a8abab2SAlex Bradbury %t2 = shl nuw i64 %t1, 32 1111a8abab2SAlex Bradbury %t3 = zext i8 %tmp1 to i64 1121a8abab2SAlex Bradbury %t4 = or i64 %t2, %t3 1131a8abab2SAlex Bradbury store i64 %t4, ptr %ref.tmp, align 8 1141a8abab2SAlex Bradbury ret void 1151a8abab2SAlex Bradbury} 1161a8abab2SAlex Bradbury 1171a8abab2SAlex Bradburydefine void @int32_int32_pair(i32 %tmp1, i32 %tmp2, ptr %ref.tmp) { 1181a8abab2SAlex Bradbury; RV32-LABEL: int32_int32_pair: 1191a8abab2SAlex Bradbury; RV32: # %bb.0: 1201a8abab2SAlex Bradbury; RV32-NEXT: sw a0, 0(a2) 121*2967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 4(a2) 1221a8abab2SAlex Bradbury; RV32-NEXT: ret 1231a8abab2SAlex Bradbury; 1241a8abab2SAlex Bradbury; RV32D-LABEL: int32_int32_pair: 1251a8abab2SAlex Bradbury; RV32D: # %bb.0: 1261a8abab2SAlex Bradbury; RV32D-NEXT: sw a0, 0(a2) 127*2967e5f8SAlex Bradbury; RV32D-NEXT: sw a1, 4(a2) 1281a8abab2SAlex Bradbury; RV32D-NEXT: ret 1291a8abab2SAlex Bradbury; 1301a8abab2SAlex Bradbury; RV64-LABEL: int32_int32_pair: 1311a8abab2SAlex Bradbury; RV64: # %bb.0: 1321a8abab2SAlex Bradbury; RV64-NEXT: slli a1, a1, 32 1331a8abab2SAlex Bradbury; RV64-NEXT: slli a0, a0, 32 1341a8abab2SAlex Bradbury; RV64-NEXT: srli a0, a0, 32 1351a8abab2SAlex Bradbury; RV64-NEXT: or a0, a1, a0 1361a8abab2SAlex Bradbury; RV64-NEXT: sd a0, 0(a2) 1371a8abab2SAlex Bradbury; RV64-NEXT: ret 1381a8abab2SAlex Bradbury; 1391a8abab2SAlex Bradbury; RV64D-LABEL: int32_int32_pair: 1401a8abab2SAlex Bradbury; RV64D: # %bb.0: 1411a8abab2SAlex Bradbury; RV64D-NEXT: slli a1, a1, 32 1421a8abab2SAlex Bradbury; RV64D-NEXT: slli a0, a0, 32 1431a8abab2SAlex Bradbury; RV64D-NEXT: srli a0, a0, 32 1441a8abab2SAlex Bradbury; RV64D-NEXT: or a0, a1, a0 1451a8abab2SAlex Bradbury; RV64D-NEXT: sd a0, 0(a2) 1461a8abab2SAlex Bradbury; RV64D-NEXT: ret 1471a8abab2SAlex Bradbury %t1 = zext i32 %tmp2 to i64 1481a8abab2SAlex Bradbury %t2 = shl nuw i64 %t1, 32 1491a8abab2SAlex Bradbury %t3 = zext i32 %tmp1 to i64 1501a8abab2SAlex Bradbury %t4 = or i64 %t2, %t3 1511a8abab2SAlex Bradbury store i64 %t4, ptr %ref.tmp, align 8 1521a8abab2SAlex Bradbury ret void 1531a8abab2SAlex Bradbury} 1541a8abab2SAlex Bradbury 1551a8abab2SAlex Bradburydefine void @mbb_int32_float_pair(i32 %tmp1, float %tmp2, ptr %ref.tmp) { 156ae147546SAlex Bradbury; RV32-RV64-LABEL: mbb_int32_float_pair: 157ae147546SAlex Bradbury; RV32-RV64: # %bb.0: # %entry 158ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a0, 0(a2) 159ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a1, 4(a2) 160ae147546SAlex Bradbury; RV32-RV64-NEXT: ret 1611a8abab2SAlex Bradbury; 162ae147546SAlex Bradbury; RV32D-RV64D-LABEL: mbb_int32_float_pair: 163ae147546SAlex Bradbury; RV32D-RV64D: # %bb.0: # %entry 164ae147546SAlex Bradbury; RV32D-RV64D-NEXT: sw a0, 0(a1) 165ae147546SAlex Bradbury; RV32D-RV64D-NEXT: fsw fa0, 4(a1) 166ae147546SAlex Bradbury; RV32D-RV64D-NEXT: ret 1671a8abab2SAlex Bradburyentry: 1681a8abab2SAlex Bradbury %t0 = bitcast float %tmp2 to i32 1691a8abab2SAlex Bradbury br label %next 1701a8abab2SAlex Bradburynext: 1711a8abab2SAlex Bradbury %t1 = zext i32 %t0 to i64 1721a8abab2SAlex Bradbury %t2 = shl nuw i64 %t1, 32 1731a8abab2SAlex Bradbury %t3 = zext i32 %tmp1 to i64 1741a8abab2SAlex Bradbury %t4 = or i64 %t2, %t3 1751a8abab2SAlex Bradbury store i64 %t4, ptr %ref.tmp, align 8 1761a8abab2SAlex Bradbury ret void 1771a8abab2SAlex Bradbury} 1781a8abab2SAlex Bradbury 1791a8abab2SAlex Bradburydefine void @mbb_int32_float_multi_stores(i32 %tmp1, float %tmp2, ptr %ref.tmp, ptr %ref.tmp1, i1 %cmp) { 180ae147546SAlex Bradbury; RV32-RV64-LABEL: mbb_int32_float_multi_stores: 181ae147546SAlex Bradbury; RV32-RV64: # %bb.0: # %entry 182ae147546SAlex Bradbury; RV32-RV64-NEXT: andi a4, a4, 1 183ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a0, 0(a2) 184ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a1, 4(a2) 185ae147546SAlex Bradbury; RV32-RV64-NEXT: beqz a4, .LBB6_2 186ae147546SAlex Bradbury; RV32-RV64-NEXT: # %bb.1: # %bb2 187ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a0, 0(a3) 188ae147546SAlex Bradbury; RV32-RV64-NEXT: sw a1, 4(a3) 189ae147546SAlex Bradbury; RV32-RV64-NEXT: .LBB6_2: # %exitbb 190ae147546SAlex Bradbury; RV32-RV64-NEXT: ret 1911a8abab2SAlex Bradbury; 192ae147546SAlex Bradbury; RV32D-RV64D-LABEL: mbb_int32_float_multi_stores: 193ae147546SAlex Bradbury; RV32D-RV64D: # %bb.0: # %entry 194ae147546SAlex Bradbury; RV32D-RV64D-NEXT: andi a3, a3, 1 195ae147546SAlex Bradbury; RV32D-RV64D-NEXT: sw a0, 0(a1) 196ae147546SAlex Bradbury; RV32D-RV64D-NEXT: fsw fa0, 4(a1) 197ae147546SAlex Bradbury; RV32D-RV64D-NEXT: beqz a3, .LBB6_2 198ae147546SAlex Bradbury; RV32D-RV64D-NEXT: # %bb.1: # %bb2 199ae147546SAlex Bradbury; RV32D-RV64D-NEXT: sw a0, 0(a2) 200ae147546SAlex Bradbury; RV32D-RV64D-NEXT: fsw fa0, 4(a2) 201ae147546SAlex Bradbury; RV32D-RV64D-NEXT: .LBB6_2: # %exitbb 202ae147546SAlex Bradbury; RV32D-RV64D-NEXT: ret 2031a8abab2SAlex Bradburyentry: 2041a8abab2SAlex Bradbury %t0 = bitcast float %tmp2 to i32 2051a8abab2SAlex Bradbury br label %bb1 2061a8abab2SAlex Bradburybb1: 2071a8abab2SAlex Bradbury %t1 = zext i32 %t0 to i64 2081a8abab2SAlex Bradbury %t2 = shl nuw i64 %t1, 32 2091a8abab2SAlex Bradbury %t3 = zext i32 %tmp1 to i64 2101a8abab2SAlex Bradbury %t4 = or i64 %t2, %t3 2111a8abab2SAlex Bradbury store i64 %t4, ptr %ref.tmp, align 8 2121a8abab2SAlex Bradbury br i1 %cmp, label %bb2, label %exitbb 2131a8abab2SAlex Bradburybb2: 2141a8abab2SAlex Bradbury store i64 %t4, ptr %ref.tmp1, align 8 2151a8abab2SAlex Bradbury br label %exitbb 2161a8abab2SAlex Bradburyexitbb: 2171a8abab2SAlex Bradbury ret void 2181a8abab2SAlex Bradbury} 219