@@ -271,8 +271,11 @@ define i64 @test11_i15_i15(i64 %x, i64 %y) {
271
271
; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])
272
272
; CHECK-NEXT: br label [[END:%.*]]
273
273
; CHECK: end:
274
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
275
- ; CHECK-NEXT: ret i64 [[DIV]]
274
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i16
275
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i16
276
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i16 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
277
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i16 [[DIV1]] to i64
278
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
276
279
;
277
280
entry:
278
281
%c0 = icmp sle i64 %x , 16383
@@ -306,8 +309,11 @@ define i64 @test12_i16_i16(i64 %x, i64 %y) {
306
309
; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])
307
310
; CHECK-NEXT: br label [[END:%.*]]
308
311
; CHECK: end:
309
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
310
- ; CHECK-NEXT: ret i64 [[DIV]]
312
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i32
313
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i32
314
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i32 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
315
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i32 [[DIV1]] to i64
316
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
311
317
;
312
318
entry:
313
319
%c0 = icmp sle i64 %x , 32767
@@ -338,8 +344,11 @@ define i64 @test13_i16_u15(i64 %x, i64 %y) {
338
344
; CHECK-NEXT: call void @llvm.assume(i1 [[C2]])
339
345
; CHECK-NEXT: br label [[END:%.*]]
340
346
; CHECK: end:
341
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
342
- ; CHECK-NEXT: ret i64 [[DIV]]
347
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i16
348
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i16
349
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i16 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
350
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i16 [[DIV1]] to i64
351
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
343
352
;
344
353
entry:
345
354
%c0 = icmp sle i64 %x , 32767
@@ -371,8 +380,11 @@ define i64 @test14_i16safe_i16(i64 %x, i64 %y) {
371
380
; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])
372
381
; CHECK-NEXT: br label [[END:%.*]]
373
382
; CHECK: end:
374
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
375
- ; CHECK-NEXT: ret i64 [[DIV]]
383
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i16
384
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i16
385
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i16 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
386
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i16 [[DIV1]] to i64
387
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
376
388
;
377
389
entry:
378
390
%c0 = icmp sle i64 %x , 32767
@@ -403,8 +415,11 @@ define i64 @test15_i16safe_u15(i64 %x, i64 %y) {
403
415
; CHECK-NEXT: call void @llvm.assume(i1 [[C2]])
404
416
; CHECK-NEXT: br label [[END:%.*]]
405
417
; CHECK: end:
406
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
407
- ; CHECK-NEXT: ret i64 [[DIV]]
418
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i16
419
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i16
420
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i16 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
421
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i16 [[DIV1]] to i64
422
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
408
423
;
409
424
entry:
410
425
%c0 = icmp sle i64 %x , 32767
@@ -435,8 +450,11 @@ define i64 @test16_i4_i4(i64 %x, i64 %y) {
435
450
; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])
436
451
; CHECK-NEXT: br label [[END:%.*]]
437
452
; CHECK: end:
438
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
439
- ; CHECK-NEXT: ret i64 [[DIV]]
453
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i8
454
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i8
455
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i8 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
456
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i8 [[DIV1]] to i64
457
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
440
458
;
441
459
entry:
442
460
%c0 = icmp sle i64 %x , 3
@@ -469,8 +487,11 @@ define i64 @test17_i9_i9(i64 %x, i64 %y) {
469
487
; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])
470
488
; CHECK-NEXT: br label [[END:%.*]]
471
489
; CHECK: end:
472
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
473
- ; CHECK-NEXT: ret i64 [[DIV]]
490
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i16
491
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i16
492
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i16 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
493
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i16 [[DIV1]] to i64
494
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
474
495
;
475
496
entry:
476
497
%c0 = icmp sle i64 %x , 255
@@ -569,8 +590,11 @@ define i64 @test20_i16_i18(i64 %x, i64 %y) {
569
590
; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])
570
591
; CHECK-NEXT: br label [[END:%.*]]
571
592
; CHECK: end:
572
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
573
- ; CHECK-NEXT: ret i64 [[DIV]]
593
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i32
594
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i32
595
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i32 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
596
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i32 [[DIV1]] to i64
597
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
574
598
;
575
599
entry:
576
600
%c0 = icmp sle i64 %x , 16383
@@ -601,8 +625,11 @@ define i64 @test21_i18_i16(i64 %x, i64 %y) {
601
625
; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])
602
626
; CHECK-NEXT: br label [[END:%.*]]
603
627
; CHECK: end:
604
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[X]], [[Y]]
605
- ; CHECK-NEXT: ret i64 [[DIV]]
628
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i32
629
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i32
630
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv i32 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
631
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i32 [[DIV1]] to i64
632
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
606
633
;
607
634
entry:
608
635
%c0 = icmp sle i64 %x , 65535
@@ -635,8 +662,11 @@ define i64 @test22_i16_i16(i64 %x, i64 %y) {
635
662
; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])
636
663
; CHECK-NEXT: br label [[END:%.*]]
637
664
; CHECK: end:
638
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv exact i64 [[X]], [[Y]]
639
- ; CHECK-NEXT: ret i64 [[DIV]]
665
+ ; CHECK-NEXT: [[DIV_LHS_TRUNC:%.*]] = trunc i64 [[X]] to i32
666
+ ; CHECK-NEXT: [[DIV_RHS_TRUNC:%.*]] = trunc i64 [[Y]] to i32
667
+ ; CHECK-NEXT: [[DIV1:%.*]] = sdiv exact i32 [[DIV_LHS_TRUNC]], [[DIV_RHS_TRUNC]]
668
+ ; CHECK-NEXT: [[DIV_SEXT:%.*]] = sext i32 [[DIV1]] to i64
669
+ ; CHECK-NEXT: ret i64 [[DIV_SEXT]]
640
670
;
641
671
entry:
642
672
%c0 = icmp sle i64 %x , 32767
0 commit comments