4
4
define zeroext i8 @smul_i8 (i8 signext %a , i8 signext %b ) nounwind ssp {
5
5
; CHECK-LABEL: smul_i8:
6
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
7
+ ; CHECK-NEXT: move.b (11,%sp), %d0
10
8
; 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
9
+ ; CHECK-NEXT: move.b (7,%sp), %d1
10
+ ; CHECK-NEXT: and.l #255, %d1
11
+ ; CHECK-NEXT: muls %d0, %d1
12
+ ; CHECK-NEXT: move.l %d1, %d0
13
+ ; CHECK-NEXT: and.l #65535, %d0
18
14
; CHECK-NEXT: and.l #255, %d0
19
15
; CHECK-NEXT: rts
16
+ entry:
17
+ %smul = tail call { i8 , i1 } @llvm.smul.with.overflow.i8 (i8 %a , i8 %b )
18
+ %cmp = extractvalue { i8 , i1 } %smul , 1
19
+ %smul.result = extractvalue { i8 , i1 } %smul , 0
20
+ %X = select i1 %cmp , i8 42 , i8 %smul.result
21
+ ret i8 %X
22
+ }
23
+
24
+ define zeroext i8 @smul_i8_no_ovf (i8 signext %a , i8 signext %b ) nounwind ssp {
25
+ ; CHECK-LABEL: smul_i8_no_ovf:
26
+ ; CHECK: ; %bb.0: ; %entry
27
+ ; CHECK-NEXT: move.l #42, %d0
28
+ ; CHECK-NEXT: rts
20
29
entry:
21
30
%smul = tail call { i8 , i1 } @llvm.smul.with.overflow.i8 (i8 %a , i8 %b )
22
31
%cmp = extractvalue { i8 , i1 } %smul , 1
@@ -33,19 +42,13 @@ define zeroext i16 @smul_i16(i16 signext %a, i16 signext %b) nounwind ssp {
33
42
; CHECK-NEXT: move.w (6,%sp), %d0
34
43
; CHECK-NEXT: move.w (10,%sp), %d1
35
44
; 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
45
; CHECK-NEXT: and.l #65535, %d0
43
46
; CHECK-NEXT: rts
44
47
entry:
45
48
%smul = tail call { i16 , i1 } @llvm.smul.with.overflow.i16 (i16 %a , i16 %b )
46
49
%cmp = extractvalue { i16 , i1 } %smul , 1
47
50
%smul.result = extractvalue { i16 , i1 } %smul , 0
48
- %X = select i1 %cmp , i16 %smul.result , i16 42
51
+ %X = select i1 %cmp , i16 42 , i16 %smul.result
49
52
ret i16 %X
50
53
}
51
54
@@ -62,15 +65,15 @@ define fastcc i1 @test1(i32 %v1, i32 %v2) nounwind {
62
65
; CHECK: ; %bb.0: ; %entry
63
66
; CHECK-NEXT: suba.l #12, %sp
64
67
; CHECK-NEXT: muls.l %d1, %d0
65
- ; CHECK-NEXT: bvc .LBB2_1
68
+ ; CHECK-NEXT: bvc .LBB3_1
66
69
; CHECK-NEXT: ; %bb.2: ; %overflow
67
70
; CHECK-NEXT: lea (no,%pc), %a0
68
71
; CHECK-NEXT: move.l %a0, (%sp)
69
72
; CHECK-NEXT: jsr printf@PLT
70
73
; CHECK-NEXT: move.b #0, %d0
71
74
; CHECK-NEXT: adda.l #12, %sp
72
75
; CHECK-NEXT: rts
73
- ; CHECK-NEXT: .LBB2_1 : ; %normal
76
+ ; CHECK-NEXT: .LBB3_1 : ; %normal
74
77
; CHECK-NEXT: move.l %d0, (4,%sp)
75
78
; CHECK-NEXT: lea (ok,%pc), %a0
76
79
; CHECK-NEXT: move.l %a0, (%sp)
@@ -100,15 +103,15 @@ define fastcc i1 @test2(i32 %v1, i32 %v2) nounwind {
100
103
; CHECK-NEXT: muls.l %d1, %d0
101
104
; CHECK-NEXT: svs %d1
102
105
; CHECK-NEXT: sub.b #1, %d1
103
- ; CHECK-NEXT: bne .LBB3_2
106
+ ; CHECK-NEXT: bne .LBB4_2
104
107
; CHECK-NEXT: ; %bb.1: ; %overflow
105
108
; CHECK-NEXT: lea (no,%pc), %a0
106
109
; CHECK-NEXT: move.l %a0, (%sp)
107
110
; CHECK-NEXT: jsr printf@PLT
108
111
; CHECK-NEXT: move.b #0, %d0
109
112
; CHECK-NEXT: adda.l #12, %sp
110
113
; CHECK-NEXT: rts
111
- ; CHECK-NEXT: .LBB3_2 : ; %normal
114
+ ; CHECK-NEXT: .LBB4_2 : ; %normal
112
115
; CHECK-NEXT: move.l %d0, (4,%sp)
113
116
; CHECK-NEXT: lea (ok,%pc), %a0
114
117
; CHECK-NEXT: move.l %a0, (%sp)
0 commit comments