xref: /aosp_15_r20/external/llvm/test/CodeGen/NVPTX/mulwide.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O3 | FileCheck %s --check-prefix=OPT
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O0 | FileCheck %s --check-prefix=NOOPT
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @mulwide16
5*9880d681SAndroid Build Coastguard Worker; NOOPT-LABEL: @mulwide16
6*9880d681SAndroid Build Coastguard Workerdefine i32 @mulwide16(i16 %a, i16 %b) {
7*9880d681SAndroid Build Coastguard Worker; OPT: mul.wide.s16
8*9880d681SAndroid Build Coastguard Worker; NOOPT: mul.lo.s32
9*9880d681SAndroid Build Coastguard Worker  %val0 = sext i16 %a to i32
10*9880d681SAndroid Build Coastguard Worker  %val1 = sext i16 %b to i32
11*9880d681SAndroid Build Coastguard Worker  %val2 = mul i32 %val0, %val1
12*9880d681SAndroid Build Coastguard Worker  ret i32 %val2
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @mulwideu16
16*9880d681SAndroid Build Coastguard Worker; NOOPT-LABEL: @mulwideu16
17*9880d681SAndroid Build Coastguard Workerdefine i32 @mulwideu16(i16 %a, i16 %b) {
18*9880d681SAndroid Build Coastguard Worker; OPT: mul.wide.u16
19*9880d681SAndroid Build Coastguard Worker; NOOPT: mul.lo.s32
20*9880d681SAndroid Build Coastguard Worker  %val0 = zext i16 %a to i32
21*9880d681SAndroid Build Coastguard Worker  %val1 = zext i16 %b to i32
22*9880d681SAndroid Build Coastguard Worker  %val2 = mul i32 %val0, %val1
23*9880d681SAndroid Build Coastguard Worker  ret i32 %val2
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @mulwide8
27*9880d681SAndroid Build Coastguard Worker; NOOPT-LABEL: @mulwide8
28*9880d681SAndroid Build Coastguard Workerdefine i32 @mulwide8(i8 %a, i8 %b) {
29*9880d681SAndroid Build Coastguard Worker; OPT: mul.wide.s16
30*9880d681SAndroid Build Coastguard Worker; NOOPT: mul.lo.s32
31*9880d681SAndroid Build Coastguard Worker  %val0 = sext i8 %a to i32
32*9880d681SAndroid Build Coastguard Worker  %val1 = sext i8 %b to i32
33*9880d681SAndroid Build Coastguard Worker  %val2 = mul i32 %val0, %val1
34*9880d681SAndroid Build Coastguard Worker  ret i32 %val2
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @mulwideu8
38*9880d681SAndroid Build Coastguard Worker; NOOPT-LABEL: @mulwideu8
39*9880d681SAndroid Build Coastguard Workerdefine i32 @mulwideu8(i8 %a, i8 %b) {
40*9880d681SAndroid Build Coastguard Worker; OPT: mul.wide.u16
41*9880d681SAndroid Build Coastguard Worker; NOOPT: mul.lo.s32
42*9880d681SAndroid Build Coastguard Worker  %val0 = zext i8 %a to i32
43*9880d681SAndroid Build Coastguard Worker  %val1 = zext i8 %b to i32
44*9880d681SAndroid Build Coastguard Worker  %val2 = mul i32 %val0, %val1
45*9880d681SAndroid Build Coastguard Worker  ret i32 %val2
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @mulwide32
49*9880d681SAndroid Build Coastguard Worker; NOOPT-LABEL: @mulwide32
50*9880d681SAndroid Build Coastguard Workerdefine i64 @mulwide32(i32 %a, i32 %b) {
51*9880d681SAndroid Build Coastguard Worker; OPT: mul.wide.s32
52*9880d681SAndroid Build Coastguard Worker; NOOPT: mul.lo.s64
53*9880d681SAndroid Build Coastguard Worker  %val0 = sext i32 %a to i64
54*9880d681SAndroid Build Coastguard Worker  %val1 = sext i32 %b to i64
55*9880d681SAndroid Build Coastguard Worker  %val2 = mul i64 %val0, %val1
56*9880d681SAndroid Build Coastguard Worker  ret i64 %val2
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @mulwideu32
60*9880d681SAndroid Build Coastguard Worker; NOOPT-LABEL: @mulwideu32
61*9880d681SAndroid Build Coastguard Workerdefine i64 @mulwideu32(i32 %a, i32 %b) {
62*9880d681SAndroid Build Coastguard Worker; OPT: mul.wide.u32
63*9880d681SAndroid Build Coastguard Worker; NOOPT: mul.lo.s64
64*9880d681SAndroid Build Coastguard Worker  %val0 = zext i32 %a to i64
65*9880d681SAndroid Build Coastguard Worker  %val1 = zext i32 %b to i64
66*9880d681SAndroid Build Coastguard Worker  %val2 = mul i64 %val0, %val1
67*9880d681SAndroid Build Coastguard Worker  ret i64 %val2
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @mulwideu7
71*9880d681SAndroid Build Coastguard Worker; NOOPT-LABEL: @mulwideu7
72*9880d681SAndroid Build Coastguard Workerdefine i64 @mulwideu7(i7 %a, i7 %b) {
73*9880d681SAndroid Build Coastguard Worker; OPT: mul.wide.u32
74*9880d681SAndroid Build Coastguard Worker; NOOPT: mul.lo.s64
75*9880d681SAndroid Build Coastguard Worker  %val0 = zext i7 %a to i64
76*9880d681SAndroid Build Coastguard Worker  %val1 = zext i7 %b to i64
77*9880d681SAndroid Build Coastguard Worker  %val2 = mul i64 %val0, %val1
78*9880d681SAndroid Build Coastguard Worker  ret i64 %val2
79*9880d681SAndroid Build Coastguard Worker}
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @mulwides7
82*9880d681SAndroid Build Coastguard Worker; NOOPT-LABEL: @mulwides7
83*9880d681SAndroid Build Coastguard Workerdefine i64 @mulwides7(i7 %a, i7 %b) {
84*9880d681SAndroid Build Coastguard Worker; OPT: mul.wide.s32
85*9880d681SAndroid Build Coastguard Worker; NOOPT: mul.lo.s64
86*9880d681SAndroid Build Coastguard Worker  %val0 = sext i7 %a to i64
87*9880d681SAndroid Build Coastguard Worker  %val1 = sext i7 %b to i64
88*9880d681SAndroid Build Coastguard Worker  %val2 = mul i64 %val0, %val1
89*9880d681SAndroid Build Coastguard Worker  ret i64 %val2
90*9880d681SAndroid Build Coastguard Worker}
91