xref: /llvm-project/llvm/test/CodeGen/RISCV/prefer-w-inst.ll (revision dbaa1893c9afe6a245860efb8d68875ba4fd6794)
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