1*dbaa1893SPengcheng Wang; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*dbaa1893SPengcheng Wang; RUN: llc -mtriple=riscv64 -mattr=+m -verify-machineinstrs < %s \ 3*dbaa1893SPengcheng Wang; RUN: | FileCheck -check-prefixes=NO-PREFER-W-INST %s 4*dbaa1893SPengcheng Wang; RUN: llc -mtriple=riscv64 -mattr=+m -riscv-disable-strip-w-suffix -verify-machineinstrs < %s \ 5*dbaa1893SPengcheng Wang; RUN: | FileCheck -check-prefixes=NO-STRIP %s 6*dbaa1893SPengcheng Wang; RUN: llc -mtriple=riscv64 -mattr=+m,+prefer-w-inst -verify-machineinstrs < %s \ 7*dbaa1893SPengcheng Wang; RUN: | FileCheck -check-prefixes=PREFER-W-INST %s 8*dbaa1893SPengcheng Wang 9*dbaa1893SPengcheng Wangdefine i32 @addiw(i32 %a) { 10*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-LABEL: addiw: 11*dbaa1893SPengcheng Wang; NO-PREFER-W-INST: # %bb.0: 12*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: lui a1, 1 13*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: addi a1, a1, -1 14*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: addw a0, a0, a1 15*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: ret 16*dbaa1893SPengcheng Wang; 17*dbaa1893SPengcheng Wang; NO-STRIP-LABEL: addiw: 18*dbaa1893SPengcheng Wang; NO-STRIP: # %bb.0: 19*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: lui a1, 1 20*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: addiw a1, a1, -1 21*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: addw a0, a0, a1 22*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: ret 23*dbaa1893SPengcheng Wang; 24*dbaa1893SPengcheng Wang; PREFER-W-INST-LABEL: addiw: 25*dbaa1893SPengcheng Wang; PREFER-W-INST: # %bb.0: 26*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: lui a1, 1 27*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: addiw a1, a1, -1 28*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: addw a0, a0, a1 29*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: ret 30*dbaa1893SPengcheng Wang %ret = add i32 %a, 4095 31*dbaa1893SPengcheng Wang ret i32 %ret 32*dbaa1893SPengcheng Wang} 33*dbaa1893SPengcheng Wang 34*dbaa1893SPengcheng Wangdefine i32 @addw(i32 %a, i32 %b) { 35*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-LABEL: addw: 36*dbaa1893SPengcheng Wang; NO-PREFER-W-INST: # %bb.0: 37*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: add a0, a0, a1 38*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: addiw a0, a0, 1024 39*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: ret 40*dbaa1893SPengcheng Wang; 41*dbaa1893SPengcheng Wang; NO-STRIP-LABEL: addw: 42*dbaa1893SPengcheng Wang; NO-STRIP: # %bb.0: 43*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: addw a0, a0, a1 44*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: addiw a0, a0, 1024 45*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: ret 46*dbaa1893SPengcheng Wang; 47*dbaa1893SPengcheng Wang; PREFER-W-INST-LABEL: addw: 48*dbaa1893SPengcheng Wang; PREFER-W-INST: # %bb.0: 49*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: addw a0, a0, a1 50*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: addiw a0, a0, 1024 51*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: ret 52*dbaa1893SPengcheng Wang %add = add i32 %a, %b 53*dbaa1893SPengcheng Wang %ret = add i32 %add, 1024 54*dbaa1893SPengcheng Wang ret i32 %ret 55*dbaa1893SPengcheng Wang} 56*dbaa1893SPengcheng Wang 57*dbaa1893SPengcheng Wangdefine i32 @mulw(i32 %a, i32 %b) { 58*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-LABEL: mulw: 59*dbaa1893SPengcheng Wang; NO-PREFER-W-INST: # %bb.0: 60*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: mul a1, a0, a1 61*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: mul a0, a0, a1 62*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: addiw a0, a0, 1024 63*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: ret 64*dbaa1893SPengcheng Wang; 65*dbaa1893SPengcheng Wang; NO-STRIP-LABEL: mulw: 66*dbaa1893SPengcheng Wang; NO-STRIP: # %bb.0: 67*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: mulw a1, a0, a1 68*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: mulw a0, a0, a1 69*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: addiw a0, a0, 1024 70*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: ret 71*dbaa1893SPengcheng Wang; 72*dbaa1893SPengcheng Wang; PREFER-W-INST-LABEL: mulw: 73*dbaa1893SPengcheng Wang; PREFER-W-INST: # %bb.0: 74*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: mulw a1, a0, a1 75*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: mulw a0, a0, a1 76*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: addiw a0, a0, 1024 77*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: ret 78*dbaa1893SPengcheng Wang %mul1 = mul i32 %a, %b 79*dbaa1893SPengcheng Wang %mul = mul i32 %a, %mul1 80*dbaa1893SPengcheng Wang %ret = add i32 %mul, 1024 81*dbaa1893SPengcheng Wang ret i32 %ret 82*dbaa1893SPengcheng Wang} 83*dbaa1893SPengcheng Wang 84*dbaa1893SPengcheng Wangdefine i32 @slliw(i32 %a) { 85*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-LABEL: slliw: 86*dbaa1893SPengcheng Wang; NO-PREFER-W-INST: # %bb.0: 87*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: slli a0, a0, 1 88*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: addiw a0, a0, 1024 89*dbaa1893SPengcheng Wang; NO-PREFER-W-INST-NEXT: ret 90*dbaa1893SPengcheng Wang; 91*dbaa1893SPengcheng Wang; NO-STRIP-LABEL: slliw: 92*dbaa1893SPengcheng Wang; NO-STRIP: # %bb.0: 93*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: slliw a0, a0, 1 94*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: addiw a0, a0, 1024 95*dbaa1893SPengcheng Wang; NO-STRIP-NEXT: ret 96*dbaa1893SPengcheng Wang; 97*dbaa1893SPengcheng Wang; PREFER-W-INST-LABEL: slliw: 98*dbaa1893SPengcheng Wang; PREFER-W-INST: # %bb.0: 99*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: slliw a0, a0, 1 100*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: addiw a0, a0, 1024 101*dbaa1893SPengcheng Wang; PREFER-W-INST-NEXT: ret 102*dbaa1893SPengcheng Wang %shl = shl i32 %a, 1 103*dbaa1893SPengcheng Wang %ret = add i32 %shl, 1024 104*dbaa1893SPengcheng Wang ret i32 %ret 105*dbaa1893SPengcheng Wang} 106