@@ -56,6 +56,28 @@ define i64 @Test_get_quotient(i64 %a, i64 %b) nounwind {
56
56
ret i64 %result
57
57
}
58
58
59
+ define i64 @Test_get_quotient_optsize (i64 %a , i64 %b ) nounwind optsize {
60
+ ; CHECK-LABEL: Test_get_quotient_optsize:
61
+ ; CHECK: # %bb.0:
62
+ ; CHECK-NEXT: movq %rdi, %rax
63
+ ; CHECK-NEXT: cqto
64
+ ; CHECK-NEXT: idivq %rsi
65
+ ; CHECK-NEXT: retq
66
+ %result = sdiv i64 %a , %b
67
+ ret i64 %result
68
+ }
69
+
70
+ define i64 @Test_get_quotient_minsize (i64 %a , i64 %b ) nounwind minsize {
71
+ ; CHECK-LABEL: Test_get_quotient_minsize:
72
+ ; CHECK: # %bb.0:
73
+ ; CHECK-NEXT: movq %rdi, %rax
74
+ ; CHECK-NEXT: cqto
75
+ ; CHECK-NEXT: idivq %rsi
76
+ ; CHECK-NEXT: retq
77
+ %result = sdiv i64 %a , %b
78
+ ret i64 %result
79
+ }
80
+
59
81
define i64 @Test_get_remainder (i64 %a , i64 %b ) nounwind {
60
82
; FAST-DIVQ-LABEL: Test_get_remainder:
61
83
; FAST-DIVQ: # %bb.0:
@@ -71,13 +93,13 @@ define i64 @Test_get_remainder(i64 %a, i64 %b) nounwind {
71
93
; SLOW-DIVQ-NEXT: movq %rdi, %rcx
72
94
; SLOW-DIVQ-NEXT: orq %rsi, %rcx
73
95
; SLOW-DIVQ-NEXT: shrq $32, %rcx
74
- ; SLOW-DIVQ-NEXT: je .LBB1_1
96
+ ; SLOW-DIVQ-NEXT: je .LBB3_1
75
97
; SLOW-DIVQ-NEXT: # %bb.2:
76
98
; SLOW-DIVQ-NEXT: cqto
77
99
; SLOW-DIVQ-NEXT: idivq %rsi
78
100
; SLOW-DIVQ-NEXT: movq %rdx, %rax
79
101
; SLOW-DIVQ-NEXT: retq
80
- ; SLOW-DIVQ-NEXT: .LBB1_1 :
102
+ ; SLOW-DIVQ-NEXT: .LBB3_1 :
81
103
; SLOW-DIVQ-NEXT: # kill: def $eax killed $eax killed $rax
82
104
; SLOW-DIVQ-NEXT: xorl %edx, %edx
83
105
; SLOW-DIVQ-NEXT: divl %esi
@@ -87,6 +109,30 @@ define i64 @Test_get_remainder(i64 %a, i64 %b) nounwind {
87
109
ret i64 %result
88
110
}
89
111
112
+ define i64 @Test_get_remainder_optsize (i64 %a , i64 %b ) nounwind optsize {
113
+ ; CHECK-LABEL: Test_get_remainder_optsize:
114
+ ; CHECK: # %bb.0:
115
+ ; CHECK-NEXT: movq %rdi, %rax
116
+ ; CHECK-NEXT: cqto
117
+ ; CHECK-NEXT: idivq %rsi
118
+ ; CHECK-NEXT: movq %rdx, %rax
119
+ ; CHECK-NEXT: retq
120
+ %result = srem i64 %a , %b
121
+ ret i64 %result
122
+ }
123
+
124
+ define i64 @Test_get_remainder_minsize (i64 %a , i64 %b ) nounwind minsize {
125
+ ; CHECK-LABEL: Test_get_remainder_minsize:
126
+ ; CHECK: # %bb.0:
127
+ ; CHECK-NEXT: movq %rdi, %rax
128
+ ; CHECK-NEXT: cqto
129
+ ; CHECK-NEXT: idivq %rsi
130
+ ; CHECK-NEXT: movq %rdx, %rax
131
+ ; CHECK-NEXT: retq
132
+ %result = srem i64 %a , %b
133
+ ret i64 %result
134
+ }
135
+
90
136
define i64 @Test_get_quotient_and_remainder (i64 %a , i64 %b ) nounwind {
91
137
; FAST-DIVQ-LABEL: Test_get_quotient_and_remainder:
92
138
; FAST-DIVQ: # %bb.0:
@@ -102,13 +148,13 @@ define i64 @Test_get_quotient_and_remainder(i64 %a, i64 %b) nounwind {
102
148
; SLOW-DIVQ-NEXT: movq %rdi, %rcx
103
149
; SLOW-DIVQ-NEXT: orq %rsi, %rcx
104
150
; SLOW-DIVQ-NEXT: shrq $32, %rcx
105
- ; SLOW-DIVQ-NEXT: je .LBB2_1
151
+ ; SLOW-DIVQ-NEXT: je .LBB6_1
106
152
; SLOW-DIVQ-NEXT: # %bb.2:
107
153
; SLOW-DIVQ-NEXT: cqto
108
154
; SLOW-DIVQ-NEXT: idivq %rsi
109
155
; SLOW-DIVQ-NEXT: addq %rdx, %rax
110
156
; SLOW-DIVQ-NEXT: retq
111
- ; SLOW-DIVQ-NEXT: .LBB2_1 :
157
+ ; SLOW-DIVQ-NEXT: .LBB6_1 :
112
158
; SLOW-DIVQ-NEXT: # kill: def $eax killed $eax killed $rax
113
159
; SLOW-DIVQ-NEXT: xorl %edx, %edx
114
160
; SLOW-DIVQ-NEXT: divl %esi
@@ -122,6 +168,34 @@ define i64 @Test_get_quotient_and_remainder(i64 %a, i64 %b) nounwind {
122
168
ret i64 %result
123
169
}
124
170
171
+ define i64 @Test_get_quotient_and_remainder_optsize (i64 %a , i64 %b ) nounwind optsize {
172
+ ; CHECK-LABEL: Test_get_quotient_and_remainder_optsize:
173
+ ; CHECK: # %bb.0:
174
+ ; CHECK-NEXT: movq %rdi, %rax
175
+ ; CHECK-NEXT: cqto
176
+ ; CHECK-NEXT: idivq %rsi
177
+ ; CHECK-NEXT: addq %rdx, %rax
178
+ ; CHECK-NEXT: retq
179
+ %resultdiv = sdiv i64 %a , %b
180
+ %resultrem = srem i64 %a , %b
181
+ %result = add i64 %resultdiv , %resultrem
182
+ ret i64 %result
183
+ }
184
+
185
+ define i64 @Test_get_quotient_and_remainder_minsize (i64 %a , i64 %b ) nounwind minsize {
186
+ ; CHECK-LABEL: Test_get_quotient_and_remainder_minsize:
187
+ ; CHECK: # %bb.0:
188
+ ; CHECK-NEXT: movq %rdi, %rax
189
+ ; CHECK-NEXT: cqto
190
+ ; CHECK-NEXT: idivq %rsi
191
+ ; CHECK-NEXT: addq %rdx, %rax
192
+ ; CHECK-NEXT: retq
193
+ %resultdiv = sdiv i64 %a , %b
194
+ %resultrem = srem i64 %a , %b
195
+ %result = add i64 %resultdiv , %resultrem
196
+ ret i64 %result
197
+ }
198
+
125
199
define void @PR43514 (i32 %x , i32 %y ) {
126
200
; CHECK-LABEL: PR43514:
127
201
; CHECK: # %bb.0:
0 commit comments