@@ -191,7 +191,8 @@ define signext i32 @sdiv_si32_ui32_ui32(i32 %a, i32 %b) {
191
191
; LA64: # %bb.0: # %entry
192
192
; LA64-NEXT: addi.w $a1, $a1, 0
193
193
; LA64-NEXT: addi.w $a0, $a0, 0
194
- ; LA64-NEXT: div.w $a0, $a0, $a1
194
+ ; LA64-NEXT: div.d $a0, $a0, $a1
195
+ ; LA64-NEXT: addi.w $a0, $a0, 0
195
196
; LA64-NEXT: ret
196
197
;
197
198
; LA32-TRAP-LABEL: sdiv_si32_ui32_ui32:
@@ -207,11 +208,12 @@ define signext i32 @sdiv_si32_ui32_ui32(i32 %a, i32 %b) {
207
208
; LA64-TRAP: # %bb.0: # %entry
208
209
; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
209
210
; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
210
- ; LA64-TRAP-NEXT: div.w $a0, $a0, $a1
211
+ ; LA64-TRAP-NEXT: div.d $a0, $a0, $a1
211
212
; LA64-TRAP-NEXT: bnez $a1, .LBB5_2
212
213
; LA64-TRAP-NEXT: # %bb.1: # %entry
213
214
; LA64-TRAP-NEXT: break 7
214
215
; LA64-TRAP-NEXT: .LBB5_2: # %entry
216
+ ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
215
217
; LA64-TRAP-NEXT: ret
216
218
entry:
217
219
%r = sdiv i32 %a , %b
@@ -1151,3 +1153,64 @@ entry:
1151
1153
%r = urem i64 %a , %b
1152
1154
ret i64 %r
1153
1155
}
1156
+
1157
+ define signext i32 @pr107414 (i32 signext %x ) {
1158
+ ; LA32-LABEL: pr107414:
1159
+ ; LA32: # %bb.0: # %entry
1160
+ ; LA32-NEXT: addi.w $sp, $sp, -16
1161
+ ; LA32-NEXT: .cfi_def_cfa_offset 16
1162
+ ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
1163
+ ; LA32-NEXT: .cfi_offset 1, -4
1164
+ ; LA32-NEXT: move $a2, $a0
1165
+ ; LA32-NEXT: srai.w $a3, $a0, 31
1166
+ ; LA32-NEXT: lu12i.w $a0, -266831
1167
+ ; LA32-NEXT: ori $a0, $a0, 3337
1168
+ ; LA32-NEXT: move $a1, $zero
1169
+ ; LA32-NEXT: bl %plt(__divdi3)
1170
+ ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
1171
+ ; LA32-NEXT: addi.w $sp, $sp, 16
1172
+ ; LA32-NEXT: ret
1173
+ ;
1174
+ ; LA64-LABEL: pr107414:
1175
+ ; LA64: # %bb.0: # %entry
1176
+ ; LA64-NEXT: lu12i.w $a1, -266831
1177
+ ; LA64-NEXT: ori $a1, $a1, 3337
1178
+ ; LA64-NEXT: lu32i.d $a1, 0
1179
+ ; LA64-NEXT: div.d $a0, $a1, $a0
1180
+ ; LA64-NEXT: addi.w $a0, $a0, 0
1181
+ ; LA64-NEXT: ret
1182
+ ;
1183
+ ; LA32-TRAP-LABEL: pr107414:
1184
+ ; LA32-TRAP: # %bb.0: # %entry
1185
+ ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16
1186
+ ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16
1187
+ ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
1188
+ ; LA32-TRAP-NEXT: .cfi_offset 1, -4
1189
+ ; LA32-TRAP-NEXT: move $a2, $a0
1190
+ ; LA32-TRAP-NEXT: srai.w $a3, $a0, 31
1191
+ ; LA32-TRAP-NEXT: lu12i.w $a0, -266831
1192
+ ; LA32-TRAP-NEXT: ori $a0, $a0, 3337
1193
+ ; LA32-TRAP-NEXT: move $a1, $zero
1194
+ ; LA32-TRAP-NEXT: bl %plt(__divdi3)
1195
+ ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
1196
+ ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16
1197
+ ; LA32-TRAP-NEXT: ret
1198
+ ;
1199
+ ; LA64-TRAP-LABEL: pr107414:
1200
+ ; LA64-TRAP: # %bb.0: # %entry
1201
+ ; LA64-TRAP-NEXT: lu12i.w $a1, -266831
1202
+ ; LA64-TRAP-NEXT: ori $a1, $a1, 3337
1203
+ ; LA64-TRAP-NEXT: lu32i.d $a1, 0
1204
+ ; LA64-TRAP-NEXT: div.d $a1, $a1, $a0
1205
+ ; LA64-TRAP-NEXT: bnez $a0, .LBB32_2
1206
+ ; LA64-TRAP-NEXT: # %bb.1: # %entry
1207
+ ; LA64-TRAP-NEXT: break 7
1208
+ ; LA64-TRAP-NEXT: .LBB32_2: # %entry
1209
+ ; LA64-TRAP-NEXT: addi.w $a0, $a1, 0
1210
+ ; LA64-TRAP-NEXT: ret
1211
+ entry:
1212
+ %conv = sext i32 %x to i64
1213
+ %div = sdiv i64 3202030857 , %conv
1214
+ %conv1 = trunc i64 %div to i32
1215
+ ret i32 %conv1
1216
+ }
0 commit comments