13083acc2SLiqinWeng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 2b359c84fSLuke Lau; RUN: llc -mtriple=riscv64 < %s | FileCheck -check-prefixes=RV64,NO-ZBA %s 3b359c84fSLuke Lau; RUN: llc -mtriple=riscv64 -mattr=+zba < %s | FileCheck -check-prefixes=RV64,ZBA %s 43083acc2SLiqinWeng 53083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_add(ptr %array1, i32 %a, i32 %b) { 6b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_add: 7b359c84fSLuke Lau; NO-ZBA: # %bb.0: # %entry 8b359c84fSLuke Lau; NO-ZBA-NEXT: addi a3, a1, 5 9b359c84fSLuke Lau; NO-ZBA-NEXT: sext.w a1, a1 10b359c84fSLuke Lau; NO-ZBA-NEXT: slli a1, a1, 2 11b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a1, a0 12b359c84fSLuke Lau; NO-ZBA-NEXT: sw a2, 20(a0) 13b359c84fSLuke Lau; NO-ZBA-NEXT: sw a2, 24(a0) 14b359c84fSLuke Lau; NO-ZBA-NEXT: sw a3, 140(a0) 15b359c84fSLuke Lau; NO-ZBA-NEXT: ret 16b359c84fSLuke Lau; 17b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_add: 18b359c84fSLuke Lau; ZBA: # %bb.0: # %entry 19b359c84fSLuke Lau; ZBA-NEXT: addi a3, a1, 5 20b359c84fSLuke Lau; ZBA-NEXT: sext.w a1, a1 21b359c84fSLuke Lau; ZBA-NEXT: sh2add a0, a1, a0 22b359c84fSLuke Lau; ZBA-NEXT: sw a2, 20(a0) 23b359c84fSLuke Lau; ZBA-NEXT: sw a2, 24(a0) 24b359c84fSLuke Lau; ZBA-NEXT: sw a3, 140(a0) 25b359c84fSLuke Lau; ZBA-NEXT: ret 263083acc2SLiqinWengentry: 273083acc2SLiqinWeng %add = add nsw i32 %a, 5 283083acc2SLiqinWeng %idxprom = sext i32 %add to i64 293083acc2SLiqinWeng %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom 303083acc2SLiqinWeng store i32 %b, ptr %arrayidx 313083acc2SLiqinWeng %add3 = add nsw i32 %a, 6 323083acc2SLiqinWeng %idxprom4 = sext i32 %add3 to i64 333083acc2SLiqinWeng %arrayidx5 = getelementptr inbounds i32, ptr %array1, i64 %idxprom4 343083acc2SLiqinWeng store i32 %b, ptr %arrayidx5 353083acc2SLiqinWeng %add6 = add nsw i32 %a, 35 363083acc2SLiqinWeng %idxprom7 = sext i32 %add6 to i64 373083acc2SLiqinWeng %arrayidx8 = getelementptr inbounds i32, ptr %array1, i64 %idxprom7 383083acc2SLiqinWeng store i32 %add, ptr %arrayidx8 393083acc2SLiqinWeng ret void 403083acc2SLiqinWeng} 413083acc2SLiqinWeng 423083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_addexceedsign12(ptr %array1, i32 %a, i32 %b) { 43b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_addexceedsign12: 44b359c84fSLuke Lau; NO-ZBA: # %bb.0: # %entry 45b359c84fSLuke Lau; NO-ZBA-NEXT: addi a3, a1, 2047 46b359c84fSLuke Lau; NO-ZBA-NEXT: lui a4, 2 47b359c84fSLuke Lau; NO-ZBA-NEXT: sext.w a1, a1 48b359c84fSLuke Lau; NO-ZBA-NEXT: addi a3, a3, 1 49b359c84fSLuke Lau; NO-ZBA-NEXT: slli a1, a1, 2 50b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a0, a4 51b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a0, a1 52b359c84fSLuke Lau; NO-ZBA-NEXT: sw a2, 0(a0) 53b359c84fSLuke Lau; NO-ZBA-NEXT: sw a3, 4(a0) 54b359c84fSLuke Lau; NO-ZBA-NEXT: sw a2, 120(a0) 55b359c84fSLuke Lau; NO-ZBA-NEXT: ret 56b359c84fSLuke Lau; 57b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_addexceedsign12: 58b359c84fSLuke Lau; ZBA: # %bb.0: # %entry 59b359c84fSLuke Lau; ZBA-NEXT: addi a3, a1, 2047 60b359c84fSLuke Lau; ZBA-NEXT: lui a4, 2 61b359c84fSLuke Lau; ZBA-NEXT: sext.w a1, a1 62b359c84fSLuke Lau; ZBA-NEXT: addi a3, a3, 1 63b359c84fSLuke Lau; ZBA-NEXT: sh2add a0, a1, a0 64b359c84fSLuke Lau; ZBA-NEXT: add a0, a0, a4 65b359c84fSLuke Lau; ZBA-NEXT: sw a2, 0(a0) 66b359c84fSLuke Lau; ZBA-NEXT: sw a3, 4(a0) 67b359c84fSLuke Lau; ZBA-NEXT: sw a2, 120(a0) 68b359c84fSLuke Lau; ZBA-NEXT: ret 693083acc2SLiqinWengentry: 703083acc2SLiqinWeng %add = add nsw i32 %a, 2048 713083acc2SLiqinWeng %idxprom = sext i32 %add to i64 723083acc2SLiqinWeng %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom 733083acc2SLiqinWeng store i32 %b, ptr %arrayidx 743083acc2SLiqinWeng %0 = sext i32 %a to i64 753083acc2SLiqinWeng %1 = getelementptr i32, ptr %array1, i64 %0 763083acc2SLiqinWeng %arrayidx3 = getelementptr i8, ptr %1, i64 8196 773083acc2SLiqinWeng store i32 %add, ptr %arrayidx3 783083acc2SLiqinWeng %arrayidx6 = getelementptr i8, ptr %1, i64 8312 793083acc2SLiqinWeng store i32 %b, ptr %arrayidx6 803083acc2SLiqinWeng ret void 813083acc2SLiqinWeng} 823083acc2SLiqinWeng 833083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_sext(ptr %array1, i32 %a, i32 %b) { 84b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_sext: 85b359c84fSLuke Lau; NO-ZBA: # %bb.0: # %entry 86b359c84fSLuke Lau; NO-ZBA-NEXT: sext.w a1, a1 87b359c84fSLuke Lau; NO-ZBA-NEXT: addi a3, a1, 5 88b359c84fSLuke Lau; NO-ZBA-NEXT: slli a1, a1, 2 89b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a1, a0 90b359c84fSLuke Lau; NO-ZBA-NEXT: sw a2, 20(a0) 91b359c84fSLuke Lau; NO-ZBA-NEXT: sw a2, 24(a0) 92b359c84fSLuke Lau; NO-ZBA-NEXT: sd a3, 140(a0) 93b359c84fSLuke Lau; NO-ZBA-NEXT: ret 94b359c84fSLuke Lau; 95b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_sext: 96b359c84fSLuke Lau; ZBA: # %bb.0: # %entry 97b359c84fSLuke Lau; ZBA-NEXT: sext.w a1, a1 98b359c84fSLuke Lau; ZBA-NEXT: addi a3, a1, 5 99b359c84fSLuke Lau; ZBA-NEXT: sh2add a0, a1, a0 100b359c84fSLuke Lau; ZBA-NEXT: sw a2, 20(a0) 101b359c84fSLuke Lau; ZBA-NEXT: sw a2, 24(a0) 102b359c84fSLuke Lau; ZBA-NEXT: sd a3, 140(a0) 103b359c84fSLuke Lau; ZBA-NEXT: ret 1043083acc2SLiqinWengentry: 1053083acc2SLiqinWeng %add = add nsw i32 %a, 5 1063083acc2SLiqinWeng %idxprom = sext i32 %add to i64 1073083acc2SLiqinWeng %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom 1083083acc2SLiqinWeng store i32 %b, ptr %arrayidx 1093083acc2SLiqinWeng %add3 = add nsw i32 %a, 6 1103083acc2SLiqinWeng %idxprom4 = sext i32 %add3 to i64 1113083acc2SLiqinWeng %arrayidx5 = getelementptr inbounds i32, ptr %array1, i64 %idxprom4 1123083acc2SLiqinWeng store i32 %b, ptr %arrayidx5 1133083acc2SLiqinWeng %add6 = add nsw i32 %a, 35 1143083acc2SLiqinWeng %idxprom7 = sext i32 %add6 to i64 1153083acc2SLiqinWeng %arrayidx8 = getelementptr inbounds i32, ptr %array1, i64 %idxprom7 1163083acc2SLiqinWeng store i64 %idxprom, ptr %arrayidx8 1173083acc2SLiqinWeng ret void 1183083acc2SLiqinWeng} 1193083acc2SLiqinWeng 1203083acc2SLiqinWeng; test of jumpping, find add's operand has one more use can simplified 1213083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_add_inSelect(ptr %array1, i32 signext %a, i32 %b, i32 signext %x) { 122b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_add_inSelect: 123b359c84fSLuke Lau; NO-ZBA: # %bb.0: # %entry 124b359c84fSLuke Lau; NO-ZBA-NEXT: addi a4, a1, 5 125b359c84fSLuke Lau; NO-ZBA-NEXT: mv a5, a4 126b359c84fSLuke Lau; NO-ZBA-NEXT: bgtz a3, .LBB3_2 127b359c84fSLuke Lau; NO-ZBA-NEXT: # %bb.1: # %entry 128b359c84fSLuke Lau; NO-ZBA-NEXT: mv a5, a2 129b359c84fSLuke Lau; NO-ZBA-NEXT: .LBB3_2: # %entry 130b359c84fSLuke Lau; NO-ZBA-NEXT: slli a1, a1, 2 131b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a1, a0 132b359c84fSLuke Lau; NO-ZBA-NEXT: sw a5, 20(a0) 133b359c84fSLuke Lau; NO-ZBA-NEXT: sw a5, 24(a0) 134b359c84fSLuke Lau; NO-ZBA-NEXT: sw a4, 140(a0) 135b359c84fSLuke Lau; NO-ZBA-NEXT: ret 136b359c84fSLuke Lau; 137b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_add_inSelect: 138b359c84fSLuke Lau; ZBA: # %bb.0: # %entry 139b359c84fSLuke Lau; ZBA-NEXT: addi a4, a1, 5 140b359c84fSLuke Lau; ZBA-NEXT: mv a5, a4 141b359c84fSLuke Lau; ZBA-NEXT: bgtz a3, .LBB3_2 142b359c84fSLuke Lau; ZBA-NEXT: # %bb.1: # %entry 143b359c84fSLuke Lau; ZBA-NEXT: mv a5, a2 144b359c84fSLuke Lau; ZBA-NEXT: .LBB3_2: # %entry 145b359c84fSLuke Lau; ZBA-NEXT: sh2add a0, a1, a0 146b359c84fSLuke Lau; ZBA-NEXT: sw a5, 20(a0) 147b359c84fSLuke Lau; ZBA-NEXT: sw a5, 24(a0) 148b359c84fSLuke Lau; ZBA-NEXT: sw a4, 140(a0) 149b359c84fSLuke Lau; ZBA-NEXT: ret 1503083acc2SLiqinWengentry: 1513083acc2SLiqinWeng %add = add nsw i32 %a, 5 1523083acc2SLiqinWeng %cmp = icmp sgt i32 %x, 0 1533083acc2SLiqinWeng %idxprom = sext i32 %add to i64 1543083acc2SLiqinWeng %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom 1553083acc2SLiqinWeng %add.b = select i1 %cmp, i32 %add, i32 %b 1563083acc2SLiqinWeng store i32 %add.b, ptr %arrayidx 1573083acc2SLiqinWeng %add5 = add nsw i32 %a, 6 1583083acc2SLiqinWeng %idxprom6 = sext i32 %add5 to i64 1593083acc2SLiqinWeng %arrayidx7 = getelementptr inbounds i32, ptr %array1, i64 %idxprom6 1603083acc2SLiqinWeng store i32 %add.b, ptr %arrayidx7 1613083acc2SLiqinWeng %add8 = add nsw i32 %a, 35 1623083acc2SLiqinWeng %idxprom9 = sext i32 %add8 to i64 1633083acc2SLiqinWeng %arrayidx10 = getelementptr inbounds i32, ptr %array1, i64 %idxprom9 1643083acc2SLiqinWeng store i32 %add, ptr %arrayidx10 1653083acc2SLiqinWeng ret void 1663083acc2SLiqinWeng} 1673083acc2SLiqinWeng 1683083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_add_inSelect_addexceedsign12(ptr %array1, i32 signext %a, i32 %b, i32 signext %x) { 169b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_add_inSelect_addexceedsign12: 170b359c84fSLuke Lau; NO-ZBA: # %bb.0: # %entry 171b359c84fSLuke Lau; NO-ZBA-NEXT: addi a4, a1, 2047 172b359c84fSLuke Lau; NO-ZBA-NEXT: lui a5, 2 173b359c84fSLuke Lau; NO-ZBA-NEXT: slli a6, a1, 2 174b359c84fSLuke Lau; NO-ZBA-NEXT: addi a1, a4, 1 175b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a0, a6 176b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a0, a5 177b359c84fSLuke Lau; NO-ZBA-NEXT: mv a4, a1 178b359c84fSLuke Lau; NO-ZBA-NEXT: bgtz a3, .LBB4_2 179b359c84fSLuke Lau; NO-ZBA-NEXT: # %bb.1: # %entry 180b359c84fSLuke Lau; NO-ZBA-NEXT: mv a4, a2 181b359c84fSLuke Lau; NO-ZBA-NEXT: .LBB4_2: # %entry 182b359c84fSLuke Lau; NO-ZBA-NEXT: sw a4, 0(a0) 183b359c84fSLuke Lau; NO-ZBA-NEXT: sw a4, 4(a0) 184b359c84fSLuke Lau; NO-ZBA-NEXT: sw a1, 120(a0) 185b359c84fSLuke Lau; NO-ZBA-NEXT: ret 186b359c84fSLuke Lau; 187b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_add_inSelect_addexceedsign12: 188b359c84fSLuke Lau; ZBA: # %bb.0: # %entry 189b359c84fSLuke Lau; ZBA-NEXT: addi a4, a1, 2047 190b359c84fSLuke Lau; ZBA-NEXT: lui a5, 2 191b359c84fSLuke Lau; ZBA-NEXT: addi a4, a4, 1 192b359c84fSLuke Lau; ZBA-NEXT: sh2add a0, a1, a0 193b359c84fSLuke Lau; ZBA-NEXT: add a0, a0, a5 194b359c84fSLuke Lau; ZBA-NEXT: mv a1, a4 195b359c84fSLuke Lau; ZBA-NEXT: bgtz a3, .LBB4_2 196b359c84fSLuke Lau; ZBA-NEXT: # %bb.1: # %entry 197b359c84fSLuke Lau; ZBA-NEXT: mv a1, a2 198b359c84fSLuke Lau; ZBA-NEXT: .LBB4_2: # %entry 199b359c84fSLuke Lau; ZBA-NEXT: sw a1, 0(a0) 200b359c84fSLuke Lau; ZBA-NEXT: sw a1, 4(a0) 201b359c84fSLuke Lau; ZBA-NEXT: sw a4, 120(a0) 202b359c84fSLuke Lau; ZBA-NEXT: ret 2033083acc2SLiqinWengentry: 2043083acc2SLiqinWeng %add = add nsw i32 %a, 2048 2053083acc2SLiqinWeng %cmp = icmp sgt i32 %x, 0 2063083acc2SLiqinWeng %idxprom = sext i32 %add to i64 2073083acc2SLiqinWeng %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom 2083083acc2SLiqinWeng %add.b = select i1 %cmp, i32 %add, i32 %b 2093083acc2SLiqinWeng store i32 %add.b, ptr %arrayidx 2103083acc2SLiqinWeng %0 = sext i32 %a to i64 2113083acc2SLiqinWeng %1 = getelementptr i32, ptr %array1, i64 %0 2123083acc2SLiqinWeng %arrayidx7 = getelementptr i8, ptr %1, i64 8196 2133083acc2SLiqinWeng store i32 %add.b, ptr %arrayidx7 2143083acc2SLiqinWeng %arrayidx10 = getelementptr i8, ptr %1, i64 8312 2153083acc2SLiqinWeng store i32 %add, ptr %arrayidx10 2163083acc2SLiqinWeng ret void 2173083acc2SLiqinWeng} 2183083acc2SLiqinWeng 2193083acc2SLiqinWengdefine void @add_shl_moreOneUse_inSelect(ptr %array1, i64 %a, i64 %b, i64 %x) { 220b359c84fSLuke Lau; NO-ZBA-LABEL: add_shl_moreOneUse_inSelect: 221b359c84fSLuke Lau; NO-ZBA: # %bb.0: # %entry 222b359c84fSLuke Lau; NO-ZBA-NEXT: addi a4, a1, 5 223b359c84fSLuke Lau; NO-ZBA-NEXT: mv a5, a4 224b359c84fSLuke Lau; NO-ZBA-NEXT: bgtz a3, .LBB5_2 225b359c84fSLuke Lau; NO-ZBA-NEXT: # %bb.1: # %entry 226b359c84fSLuke Lau; NO-ZBA-NEXT: mv a5, a2 227b359c84fSLuke Lau; NO-ZBA-NEXT: .LBB5_2: # %entry 228b359c84fSLuke Lau; NO-ZBA-NEXT: slli a1, a1, 3 229b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a1, a0 230b359c84fSLuke Lau; NO-ZBA-NEXT: sd a5, 40(a0) 231b359c84fSLuke Lau; NO-ZBA-NEXT: sd a5, 48(a0) 232b359c84fSLuke Lau; NO-ZBA-NEXT: sd a4, 280(a0) 233b359c84fSLuke Lau; NO-ZBA-NEXT: ret 234b359c84fSLuke Lau; 235b359c84fSLuke Lau; ZBA-LABEL: add_shl_moreOneUse_inSelect: 236b359c84fSLuke Lau; ZBA: # %bb.0: # %entry 237b359c84fSLuke Lau; ZBA-NEXT: addi a4, a1, 5 238b359c84fSLuke Lau; ZBA-NEXT: mv a5, a4 239b359c84fSLuke Lau; ZBA-NEXT: bgtz a3, .LBB5_2 240b359c84fSLuke Lau; ZBA-NEXT: # %bb.1: # %entry 241b359c84fSLuke Lau; ZBA-NEXT: mv a5, a2 242b359c84fSLuke Lau; ZBA-NEXT: .LBB5_2: # %entry 243b359c84fSLuke Lau; ZBA-NEXT: sh3add a0, a1, a0 244b359c84fSLuke Lau; ZBA-NEXT: sd a5, 40(a0) 245b359c84fSLuke Lau; ZBA-NEXT: sd a5, 48(a0) 246b359c84fSLuke Lau; ZBA-NEXT: sd a4, 280(a0) 247b359c84fSLuke Lau; ZBA-NEXT: ret 2483083acc2SLiqinWengentry: 2493083acc2SLiqinWeng %add = add nsw i64 %a, 5 2503083acc2SLiqinWeng %cmp = icmp sgt i64 %x, 0 2513083acc2SLiqinWeng %spec.select = select i1 %cmp, i64 %add, i64 %b 2523083acc2SLiqinWeng %0 = getelementptr inbounds i64, ptr %array1, i64 %add 2533083acc2SLiqinWeng store i64 %spec.select, ptr %0 2543083acc2SLiqinWeng %add3 = add nsw i64 %a, 6 2553083acc2SLiqinWeng %arrayidx4 = getelementptr inbounds i64, ptr %array1, i64 %add3 2563083acc2SLiqinWeng store i64 %spec.select, ptr %arrayidx4 2573083acc2SLiqinWeng %add5 = add nsw i64 %a, 35 2583083acc2SLiqinWeng %arrayidx6 = getelementptr inbounds i64, ptr %array1, i64 %add5 2593083acc2SLiqinWeng store i64 %add, ptr %arrayidx6 2603083acc2SLiqinWeng ret void 2613083acc2SLiqinWeng} 262b359c84fSLuke Lau 263b359c84fSLuke Laudefine i64 @add_shl_moreOneUse_sh1add(i64 %x) { 264b359c84fSLuke Lau; NO-ZBA-LABEL: add_shl_moreOneUse_sh1add: 265b359c84fSLuke Lau; NO-ZBA: # %bb.0: 266b359c84fSLuke Lau; NO-ZBA-NEXT: ori a1, a0, 1 267b359c84fSLuke Lau; NO-ZBA-NEXT: slli a0, a0, 1 268b359c84fSLuke Lau; NO-ZBA-NEXT: ori a0, a0, 2 269b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a0, a1 270b359c84fSLuke Lau; NO-ZBA-NEXT: ret 271b359c84fSLuke Lau; 272b359c84fSLuke Lau; ZBA-LABEL: add_shl_moreOneUse_sh1add: 273b359c84fSLuke Lau; ZBA: # %bb.0: 274b359c84fSLuke Lau; ZBA-NEXT: ori a0, a0, 1 275b359c84fSLuke Lau; ZBA-NEXT: sh1add a0, a0, a0 276b359c84fSLuke Lau; ZBA-NEXT: ret 277b359c84fSLuke Lau %or = or i64 %x, 1 278b359c84fSLuke Lau %mul = shl i64 %or, 1 279b359c84fSLuke Lau %add = add i64 %mul, %or 280b359c84fSLuke Lau ret i64 %add 281b359c84fSLuke Lau} 282b359c84fSLuke Lau 283b359c84fSLuke Laudefine i64 @add_shl_moreOneUse_sh2add(i64 %x) { 284b359c84fSLuke Lau; NO-ZBA-LABEL: add_shl_moreOneUse_sh2add: 285b359c84fSLuke Lau; NO-ZBA: # %bb.0: 286b359c84fSLuke Lau; NO-ZBA-NEXT: ori a1, a0, 1 287b359c84fSLuke Lau; NO-ZBA-NEXT: slli a0, a0, 2 288b359c84fSLuke Lau; NO-ZBA-NEXT: ori a0, a0, 4 289b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a0, a1 290b359c84fSLuke Lau; NO-ZBA-NEXT: ret 291b359c84fSLuke Lau; 292b359c84fSLuke Lau; ZBA-LABEL: add_shl_moreOneUse_sh2add: 293b359c84fSLuke Lau; ZBA: # %bb.0: 294b359c84fSLuke Lau; ZBA-NEXT: ori a0, a0, 1 295b359c84fSLuke Lau; ZBA-NEXT: sh2add a0, a0, a0 296b359c84fSLuke Lau; ZBA-NEXT: ret 297b359c84fSLuke Lau %or = or i64 %x, 1 298b359c84fSLuke Lau %mul = shl i64 %or, 2 299b359c84fSLuke Lau %add = add i64 %mul, %or 300b359c84fSLuke Lau ret i64 %add 301b359c84fSLuke Lau} 302b359c84fSLuke Lau 303b359c84fSLuke Laudefine i64 @add_shl_moreOneUse_sh3add(i64 %x) { 304b359c84fSLuke Lau; NO-ZBA-LABEL: add_shl_moreOneUse_sh3add: 305b359c84fSLuke Lau; NO-ZBA: # %bb.0: 306b359c84fSLuke Lau; NO-ZBA-NEXT: ori a1, a0, 1 307b359c84fSLuke Lau; NO-ZBA-NEXT: slli a0, a0, 3 308b359c84fSLuke Lau; NO-ZBA-NEXT: ori a0, a0, 8 309b359c84fSLuke Lau; NO-ZBA-NEXT: add a0, a0, a1 310b359c84fSLuke Lau; NO-ZBA-NEXT: ret 311b359c84fSLuke Lau; 312b359c84fSLuke Lau; ZBA-LABEL: add_shl_moreOneUse_sh3add: 313b359c84fSLuke Lau; ZBA: # %bb.0: 314b359c84fSLuke Lau; ZBA-NEXT: ori a0, a0, 1 315b359c84fSLuke Lau; ZBA-NEXT: sh3add a0, a0, a0 316b359c84fSLuke Lau; ZBA-NEXT: ret 317b359c84fSLuke Lau %or = or i64 %x, 1 318b359c84fSLuke Lau %mul = shl i64 %or, 3 319b359c84fSLuke Lau %add = add i64 %mul, %or 320b359c84fSLuke Lau ret i64 %add 321b359c84fSLuke Lau} 322b359c84fSLuke Lau 323*51c9c823SMikhail R. Gadelha;; Covers a case which previously crashed (pr119527) 324*51c9c823SMikhail R. Gadelhadefine i64 @add_shl_sext(i32 %1) { 325*51c9c823SMikhail R. Gadelha; RV64-LABEL: add_shl_sext: 326*51c9c823SMikhail R. Gadelha; RV64: # %bb.0: 327*51c9c823SMikhail R. Gadelha; RV64-NEXT: addi a1, a0, 3 328*51c9c823SMikhail R. Gadelha; RV64-NEXT: sllw a0, a1, a0 329*51c9c823SMikhail R. Gadelha; RV64-NEXT: ret 330*51c9c823SMikhail R. Gadelha %3 = add i32 %1, 3 331*51c9c823SMikhail R. Gadelha %4 = shl i32 %3, %1 332*51c9c823SMikhail R. Gadelha %5 = sext i32 %4 to i64 333*51c9c823SMikhail R. Gadelha ret i64 %5 334*51c9c823SMikhail R. Gadelha} 335*51c9c823SMikhail R. Gadelha 336b359c84fSLuke Laudefine i64 @add_shl_moreOneUse_sh4add(i64 %x) { 337b359c84fSLuke Lau; RV64-LABEL: add_shl_moreOneUse_sh4add: 338b359c84fSLuke Lau; RV64: # %bb.0: 339b359c84fSLuke Lau; RV64-NEXT: ori a1, a0, 1 340b359c84fSLuke Lau; RV64-NEXT: slli a0, a0, 4 341b359c84fSLuke Lau; RV64-NEXT: ori a0, a0, 16 342b359c84fSLuke Lau; RV64-NEXT: add a0, a0, a1 343b359c84fSLuke Lau; RV64-NEXT: ret 344b359c84fSLuke Lau %or = or i64 %x, 1 345b359c84fSLuke Lau %mul = shl i64 %or, 4 346b359c84fSLuke Lau %add = add i64 %mul, %or 347b359c84fSLuke Lau ret i64 %add 348b359c84fSLuke Lau} 349b359c84fSLuke Lau 350b359c84fSLuke Laudefine i64 @add_shl_rhs_constant(i64 %x, i64 %y) { 351b359c84fSLuke Lau; RV64-LABEL: add_shl_rhs_constant: 352b359c84fSLuke Lau; RV64: # %bb.0: 353b359c84fSLuke Lau; RV64-NEXT: add a0, a0, a1 354b359c84fSLuke Lau; RV64-NEXT: slli a0, a0, 3 355b359c84fSLuke Lau; RV64-NEXT: ret 356b359c84fSLuke Lau %a = add i64 %x, 1 357b359c84fSLuke Lau %b = add i64 %y, %a 358b359c84fSLuke Lau %c = shl i64 %b, 3 359b359c84fSLuke Lau %d = add i64 %c, -8 360b359c84fSLuke Lau ret i64 %d 361b359c84fSLuke Lau} 362