1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s
3
3
4
+ define zeroext i8 @smul_i8 (i8 signext %a , i8 signext %b ) nounwind ssp {
5
+ ; CHECK-LABEL: smul_i8:
6
+ ; CHECK: ; %bb.0: ; %entry
7
+ ; CHECK-NEXT: move.b (11,%sp), %d1
8
+ ; CHECK-NEXT: and.l #255, %d1
9
+ ; CHECK-NEXT: move.b (7,%sp), %d0
10
+ ; CHECK-NEXT: and.l #255, %d0
11
+ ; CHECK-NEXT: muls %d1, %d0
12
+ ; CHECK-NEXT: move.b #0, %d1
13
+ ; CHECK-NEXT: move.w %d1, %ccr
14
+ ; CHECK-NEXT: bvs .LBB0_2
15
+ ; CHECK-NEXT: ; %bb.1: ; %entry
16
+ ; CHECK-NEXT: move.b #42, %d0
17
+ ; CHECK-NEXT: .LBB0_2: ; %entry
18
+ ; CHECK-NEXT: and.l #255, %d0
19
+ ; CHECK-NEXT: rts
20
+ entry:
21
+ %smul = tail call { i8 , i1 } @llvm.smul.with.overflow.i8 (i8 %a , i8 %b )
22
+ %cmp = extractvalue { i8 , i1 } %smul , 1
23
+ %smul.result = extractvalue { i8 , i1 } %smul , 0
24
+ %X = select i1 %cmp , i8 %smul.result , i8 42
25
+ ret i8 %X
26
+ }
27
+
28
+ declare { i8 , i1 } @llvm.smul.with.overflow.i8 (i8 , i8 ) nounwind readnone
29
+
30
+ define zeroext i16 @smul_i16 (i16 signext %a , i16 signext %b ) nounwind ssp {
31
+ ; CHECK-LABEL: smul_i16:
32
+ ; CHECK: ; %bb.0: ; %entry
33
+ ; CHECK-NEXT: move.w (6,%sp), %d0
34
+ ; CHECK-NEXT: move.w (10,%sp), %d1
35
+ ; CHECK-NEXT: muls %d1, %d0
36
+ ; CHECK-NEXT: move.b #0, %d1
37
+ ; CHECK-NEXT: move.w %d1, %ccr
38
+ ; CHECK-NEXT: bvs .LBB1_2
39
+ ; CHECK-NEXT: ; %bb.1: ; %entry
40
+ ; CHECK-NEXT: move.w #42, %d0
41
+ ; CHECK-NEXT: .LBB1_2: ; %entry
42
+ ; CHECK-NEXT: and.l #65535, %d0
43
+ ; CHECK-NEXT: rts
44
+ entry:
45
+ %smul = tail call { i16 , i1 } @llvm.smul.with.overflow.i16 (i16 %a , i16 %b )
46
+ %cmp = extractvalue { i16 , i1 } %smul , 1
47
+ %smul.result = extractvalue { i16 , i1 } %smul , 0
48
+ %X = select i1 %cmp , i16 %smul.result , i16 42
49
+ ret i16 %X
50
+ }
51
+
52
+ declare { i16 , i1 } @llvm.smul.with.overflow.i16 (i16 , i16 ) nounwind readnone
53
+
4
54
declare i32 @printf (i8* , ...) nounwind
5
55
declare {i32 , i1 } @llvm.smul.with.overflow.i32 (i32 , i32 )
6
56
@@ -12,15 +62,15 @@ define fastcc i1 @test1(i32 %v1, i32 %v2) nounwind {
12
62
; CHECK: ; %bb.0: ; %entry
13
63
; CHECK-NEXT: suba.l #12, %sp
14
64
; CHECK-NEXT: muls.l %d1, %d0
15
- ; CHECK-NEXT: bvc .LBB0_1
65
+ ; CHECK-NEXT: bvc .LBB2_1
16
66
; CHECK-NEXT: ; %bb.2: ; %overflow
17
67
; CHECK-NEXT: lea (no,%pc), %a0
18
68
; CHECK-NEXT: move.l %a0, (%sp)
19
69
; CHECK-NEXT: jsr printf@PLT
20
70
; CHECK-NEXT: move.b #0, %d0
21
71
; CHECK-NEXT: adda.l #12, %sp
22
72
; CHECK-NEXT: rts
23
- ; CHECK-NEXT: .LBB0_1 : ; %normal
73
+ ; CHECK-NEXT: .LBB2_1 : ; %normal
24
74
; CHECK-NEXT: move.l %d0, (4,%sp)
25
75
; CHECK-NEXT: lea (ok,%pc), %a0
26
76
; CHECK-NEXT: move.l %a0, (%sp)
@@ -50,15 +100,15 @@ define fastcc i1 @test2(i32 %v1, i32 %v2) nounwind {
50
100
; CHECK-NEXT: muls.l %d1, %d0
51
101
; CHECK-NEXT: svs %d1
52
102
; CHECK-NEXT: sub.b #1, %d1
53
- ; CHECK-NEXT: bne .LBB1_2
103
+ ; CHECK-NEXT: bne .LBB3_2
54
104
; CHECK-NEXT: ; %bb.1: ; %overflow
55
105
; CHECK-NEXT: lea (no,%pc), %a0
56
106
; CHECK-NEXT: move.l %a0, (%sp)
57
107
; CHECK-NEXT: jsr printf@PLT
58
108
; CHECK-NEXT: move.b #0, %d0
59
109
; CHECK-NEXT: adda.l #12, %sp
60
110
; CHECK-NEXT: rts
61
- ; CHECK-NEXT: .LBB1_2 : ; %normal
111
+ ; CHECK-NEXT: .LBB3_2 : ; %normal
62
112
; CHECK-NEXT: move.l %d0, (4,%sp)
63
113
; CHECK-NEXT: lea (ok,%pc), %a0
64
114
; CHECK-NEXT: move.l %a0, (%sp)
0 commit comments