blob: 1ddf9739e20252bc2632e25b2fcfec8ac0184efe [file] [log] [blame]
Justin Holewinski511664d2014-07-23 17:40:45 +00001; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O3 | FileCheck %s --check-prefix=OPT
2; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O0 | FileCheck %s --check-prefix=NOOPT
Justin Holewinskieafe26d2014-06-27 18:35:37 +00003
Justin Holewinski511664d2014-07-23 17:40:45 +00004; OPT-LABEL: @mulwide16
5; NOOPT-LABEL: @mulwide16
Justin Holewinskieafe26d2014-06-27 18:35:37 +00006define i32 @mulwide16(i16 %a, i16 %b) {
Justin Holewinski511664d2014-07-23 17:40:45 +00007; OPT: mul.wide.s16
8; NOOPT: mul.lo.s32
Justin Holewinskieafe26d2014-06-27 18:35:37 +00009 %val0 = sext i16 %a to i32
10 %val1 = sext i16 %b to i32
11 %val2 = mul i32 %val0, %val1
12 ret i32 %val2
13}
14
Justin Holewinski511664d2014-07-23 17:40:45 +000015; OPT-LABEL: @mulwideu16
16; NOOPT-LABEL: @mulwideu16
Justin Holewinskieafe26d2014-06-27 18:35:37 +000017define i32 @mulwideu16(i16 %a, i16 %b) {
Justin Holewinski511664d2014-07-23 17:40:45 +000018; OPT: mul.wide.u16
19; NOOPT: mul.lo.s32
Justin Holewinskieafe26d2014-06-27 18:35:37 +000020 %val0 = zext i16 %a to i32
21 %val1 = zext i16 %b to i32
22 %val2 = mul i32 %val0, %val1
23 ret i32 %val2
24}
25
Justin Holewinskiecca7152014-07-23 18:46:03 +000026; OPT-LABEL: @mulwide8
27; NOOPT-LABEL: @mulwide8
28define i32 @mulwide8(i8 %a, i8 %b) {
29; OPT: mul.wide.s16
30; NOOPT: mul.lo.s32
31 %val0 = sext i8 %a to i32
32 %val1 = sext i8 %b to i32
33 %val2 = mul i32 %val0, %val1
34 ret i32 %val2
35}
36
37; OPT-LABEL: @mulwideu8
38; NOOPT-LABEL: @mulwideu8
39define i32 @mulwideu8(i8 %a, i8 %b) {
40; OPT: mul.wide.u16
41; NOOPT: mul.lo.s32
42 %val0 = zext i8 %a to i32
43 %val1 = zext i8 %b to i32
44 %val2 = mul i32 %val0, %val1
45 ret i32 %val2
46}
47
Justin Holewinski511664d2014-07-23 17:40:45 +000048; OPT-LABEL: @mulwide32
49; NOOPT-LABEL: @mulwide32
Justin Holewinskieafe26d2014-06-27 18:35:37 +000050define i64 @mulwide32(i32 %a, i32 %b) {
Justin Holewinski511664d2014-07-23 17:40:45 +000051; OPT: mul.wide.s32
52; NOOPT: mul.lo.s64
Justin Holewinskieafe26d2014-06-27 18:35:37 +000053 %val0 = sext i32 %a to i64
54 %val1 = sext i32 %b to i64
55 %val2 = mul i64 %val0, %val1
56 ret i64 %val2
57}
58
Justin Holewinski511664d2014-07-23 17:40:45 +000059; OPT-LABEL: @mulwideu32
60; NOOPT-LABEL: @mulwideu32
Justin Holewinskieafe26d2014-06-27 18:35:37 +000061define i64 @mulwideu32(i32 %a, i32 %b) {
Justin Holewinski511664d2014-07-23 17:40:45 +000062; OPT: mul.wide.u32
63; NOOPT: mul.lo.s64
Justin Holewinskieafe26d2014-06-27 18:35:37 +000064 %val0 = zext i32 %a to i64
65 %val1 = zext i32 %b to i64
66 %val2 = mul i64 %val0, %val1
67 ret i64 %val2
68}
Justin Holewinski4d6f7832014-07-23 20:23:49 +000069
70; OPT-LABEL: @mulwideu7
71; NOOPT-LABEL: @mulwideu7
72define i64 @mulwideu7(i7 %a, i7 %b) {
73; OPT: mul.wide.u32
74; NOOPT: mul.lo.s64
75 %val0 = zext i7 %a to i64
76 %val1 = zext i7 %b to i64
77 %val2 = mul i64 %val0, %val1
78 ret i64 %val2
79}
80
81; OPT-LABEL: @mulwides7
82; NOOPT-LABEL: @mulwides7
83define i64 @mulwides7(i7 %a, i7 %b) {
84; OPT: mul.wide.s32
85; NOOPT: mul.lo.s64
86 %val0 = sext i7 %a to i64
87 %val1 = sext i7 %b to i64
88 %val2 = mul i64 %val0, %val1
89 ret i64 %val2
90}