58
58
entry :
59
59
%3 = icmp ne i16 %0, 0
60
60
%4 = and i32 %1, 123456
61
- %truc = trunc i32 %4 to i16
62
- %5 = icmp eq i16 %truc , 0
61
+ %trunc = trunc i32 %4 to i16
62
+ %5 = icmp eq i16 %trunc , 0
63
63
%6 = select i1 %3, i1 %5, i1 false
64
64
br i1 %6, label %if.then, label %if.end
65
65
66
66
if.then : ; preds = %entry
67
- store i16 %0, ptr %2, align 4
67
+ store i32 %4, ptr %2, align 4
68
+ br label %if.end
69
+
70
+ if.end : ; preds = %if.then, %entry
71
+ ret i16 0
72
+ }
73
+
74
+ define i16 @erase_test16_sf(i16 %0, i16 %1, ptr nocapture %2) {
75
+ entry :
76
+ %3 = icmp ne i16 %0, 0
77
+ %4 = and i16 %1, 1234
78
+ %5 = icmp slt i16 %4, 0
79
+ %6 = select i1 %3, i1 %5, i1 false
80
+ br i1 %6, label %if.then, label %if.end
81
+
82
+ if.then : ; preds = %entry
83
+ store i16 %4, ptr %2, align 4
68
84
br label %if.end
69
85
70
86
if.end : ; preds = %if.then, %entry
@@ -303,9 +319,8 @@ body: |
303
319
; CHECK-NEXT: bb.1.entry:
304
320
; CHECK-NEXT: successors: %bb.2(0x55555555), %bb.3(0x2aaaaaab)
305
321
; CHECK-NEXT: {{ $}}
306
- ; CHECK-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[COPY1]], 123, implicit-def dead $eflags
322
+ ; CHECK-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[COPY1]], 123, implicit-def $eflags
307
323
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gr16 = COPY [[AND32ri]].sub_16bit
308
- ; CHECK-NEXT: TEST16rr [[COPY4]], [[COPY4]], implicit-def $eflags
309
324
; CHECK-NEXT: JCC_1 %bb.3, 5, implicit $eflags
310
325
; CHECK-NEXT: JMP_1 %bb.2
311
326
; CHECK-NEXT: {{ $}}
@@ -374,16 +389,16 @@ tracksDebugUserValues: false
374
389
registers :
375
390
- { id: 0, class: gr32, preferred-register: '' }
376
391
- { id: 1, class: gr32, preferred-register: '' }
377
- - { id: 2, class: gr64 , preferred-register: '' }
378
- - { id: 3, class: gr16 , preferred-register: '' }
392
+ - { id: 2, class: gr32 , preferred-register: '' }
393
+ - { id: 3, class: gr64 , preferred-register: '' }
379
394
- { id: 4, class: gr16, preferred-register: '' }
380
- - { id: 5, class: gr32 , preferred-register: '' }
395
+ - { id: 5, class: gr16 , preferred-register: '' }
381
396
- { id: 6, class: gr32, preferred-register: '' }
382
397
- { id: 7, class: gr16, preferred-register: '' }
383
398
liveins :
384
- - { reg: '$edi', virtual-reg: '%0 ' }
385
- - { reg: '$esi', virtual-reg: '%1 ' }
386
- - { reg: '$rdx', virtual-reg: '%2 ' }
399
+ - { reg: '$edi', virtual-reg: '%1 ' }
400
+ - { reg: '$esi', virtual-reg: '%2 ' }
401
+ - { reg: '$rdx', virtual-reg: '%3 ' }
387
402
frameInfo :
388
403
isFrameAddressTaken : false
389
404
isReturnAddressTaken : false
@@ -429,7 +444,7 @@ body: |
429
444
; CHECK-NEXT: bb.1.entry:
430
445
; CHECK-NEXT: successors: %bb.2(0x55555555), %bb.3(0x2aaaaaab)
431
446
; CHECK-NEXT: {{ $}}
432
- ; CHECK-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[COPY1]], 57920 , implicit-def dead $eflags
447
+ ; CHECK-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[COPY1]], 123456 , implicit-def dead $eflags
433
448
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gr16 = COPY [[AND32ri]].sub_16bit
434
449
; CHECK-NEXT: TEST16rr [[COPY4]], [[COPY4]], implicit-def $eflags
435
450
; CHECK-NEXT: JCC_1 %bb.3, 5, implicit $eflags
@@ -438,7 +453,7 @@ body: |
438
453
; CHECK-NEXT: bb.2.if.then:
439
454
; CHECK-NEXT: successors: %bb.3(0x80000000)
440
455
; CHECK-NEXT: {{ $}}
441
- ; CHECK-NEXT: MOV16mr [[COPY]], 1, $noreg, 0, $noreg, [[COPY3 ]] :: (store (s16 ) into %ir.2, align 4 )
456
+ ; CHECK-NEXT: MOV32mr [[COPY]], 1, $noreg, 0, $noreg, [[AND32ri ]] :: (store (s32 ) into %ir.2)
442
457
; CHECK-NEXT: {{ $}}
443
458
; CHECK-NEXT: bb.3.if.end:
444
459
; CHECK-NEXT: [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
@@ -449,27 +464,153 @@ body: |
449
464
successors: %bb.3(0x60000000), %bb.2(0x20000000)
450
465
liveins: $edi, $esi, $rdx
451
466
452
- %2 :gr64 = COPY $rdx
453
- %1 :gr32 = COPY $esi
454
- %0 :gr32 = COPY $edi
455
- %3 :gr16 = COPY %0 .sub_16bit
456
- TEST16rr %3 , %3 , implicit-def $eflags
467
+ %3 :gr64 = COPY $rdx
468
+ %2 :gr32 = COPY $esi
469
+ %1 :gr32 = COPY $edi
470
+ %5 :gr16 = COPY %1 .sub_16bit
471
+ TEST16rr %5 , %5 , implicit-def $eflags
457
472
JCC_1 %bb.2, 4, implicit $eflags
458
473
JMP_1 %bb.3
459
474
460
475
bb.3.entry:
461
476
successors: %bb.1(0x55555555), %bb.2(0x2aaaaaab)
462
477
463
- %5 :gr32 = AND32ri %1, 57920 , implicit-def dead $eflags
464
- %4:gr16 = COPY %5 .sub_16bit
478
+ %0 :gr32 = AND32ri %2, 123456 , implicit-def dead $eflags
479
+ %4:gr16 = COPY %0 .sub_16bit
465
480
TEST16rr %4, %4, implicit-def $eflags
466
481
JCC_1 %bb.2, 5, implicit $eflags
467
482
JMP_1 %bb.1
468
483
469
484
bb.1.if.then:
470
485
successors: %bb.2(0x80000000)
471
486
472
- MOV16mr %2, 1, $noreg, 0, $noreg, %3 :: (store (s16) into %ir.2, align 4)
487
+ MOV32mr %3, 1, $noreg, 0, $noreg, %0 :: (store (s32) into %ir.2)
488
+
489
+ bb.2.if.end:
490
+ %6:gr32 = MOV32r0 implicit-def dead $eflags
491
+ %7:gr16 = COPY %6.sub_16bit
492
+ $ax = COPY %7
493
+ RET 0, $ax
494
+
495
+ ...
496
+ ---
497
+ name : erase_test16_sf
498
+ alignment : 16
499
+ exposesReturnsTwice : false
500
+ legalized : false
501
+ regBankSelected : false
502
+ selected : false
503
+ failedISel : false
504
+ tracksRegLiveness : true
505
+ hasWinCFI : false
506
+ callsEHReturn : false
507
+ callsUnwindInit : false
508
+ hasEHCatchret : false
509
+ hasEHScopes : false
510
+ hasEHFunclets : false
511
+ isOutlined : false
512
+ debugInstrRef : true
513
+ failsVerification : false
514
+ tracksDebugUserValues : false
515
+ registers :
516
+ - { id: 0, class: gr16, preferred-register: '' }
517
+ - { id: 1, class: gr32, preferred-register: '' }
518
+ - { id: 2, class: gr32, preferred-register: '' }
519
+ - { id: 3, class: gr64, preferred-register: '' }
520
+ - { id: 4, class: gr16, preferred-register: '' }
521
+ - { id: 5, class: gr32, preferred-register: '' }
522
+ - { id: 6, class: gr32, preferred-register: '' }
523
+ - { id: 7, class: gr16, preferred-register: '' }
524
+ liveins :
525
+ - { reg: '$edi', virtual-reg: '%1' }
526
+ - { reg: '$esi', virtual-reg: '%2' }
527
+ - { reg: '$rdx', virtual-reg: '%3' }
528
+ frameInfo :
529
+ isFrameAddressTaken : false
530
+ isReturnAddressTaken : false
531
+ hasStackMap : false
532
+ hasPatchPoint : false
533
+ stackSize : 0
534
+ offsetAdjustment : 0
535
+ maxAlignment : 1
536
+ adjustsStack : false
537
+ hasCalls : false
538
+ stackProtector : ' '
539
+ functionContext : ' '
540
+ maxCallFrameSize : 4294967295
541
+ cvBytesOfCalleeSavedRegisters : 0
542
+ hasOpaqueSPAdjustment : false
543
+ hasVAStart : false
544
+ hasMustTailInVarArgFunc : false
545
+ hasTailCall : false
546
+ localFrameSize : 0
547
+ savePoint : ' '
548
+ restorePoint : ' '
549
+ fixedStack : []
550
+ stack : []
551
+ entry_values : []
552
+ callSites : []
553
+ debugValueSubstitutions : []
554
+ constants : []
555
+ machineFunctionInfo : {}
556
+ body : |
557
+ ; CHECK-LABEL: name: erase_test16_sf
558
+ ; CHECK: bb.0.entry:
559
+ ; CHECK-NEXT: successors: %bb.1(0x60000000), %bb.3(0x20000000)
560
+ ; CHECK-NEXT: liveins: $edi, $esi, $rdx
561
+ ; CHECK-NEXT: {{ $}}
562
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdx
563
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
564
+ ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr32 = COPY $edi
565
+ ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gr16 = COPY [[COPY2]].sub_16bit
566
+ ; CHECK-NEXT: TEST16rr [[COPY3]], [[COPY3]], implicit-def $eflags
567
+ ; CHECK-NEXT: JCC_1 %bb.3, 4, implicit $eflags
568
+ ; CHECK-NEXT: JMP_1 %bb.1
569
+ ; CHECK-NEXT: {{ $}}
570
+ ; CHECK-NEXT: bb.1.entry:
571
+ ; CHECK-NEXT: successors: %bb.2(0x55555555), %bb.3(0x2aaaaaab)
572
+ ; CHECK-NEXT: {{ $}}
573
+ ; CHECK-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[COPY1]], 1234, implicit-def dead $eflags
574
+ ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gr16 = COPY [[AND32ri]].sub_16bit
575
+ ; CHECK-NEXT: TEST16rr [[COPY4]], [[COPY4]], implicit-def $eflags
576
+ ; CHECK-NEXT: JCC_1 %bb.3, 9, implicit $eflags
577
+ ; CHECK-NEXT: JMP_1 %bb.2
578
+ ; CHECK-NEXT: {{ $}}
579
+ ; CHECK-NEXT: bb.2.if.then:
580
+ ; CHECK-NEXT: successors: %bb.3(0x80000000)
581
+ ; CHECK-NEXT: {{ $}}
582
+ ; CHECK-NEXT: MOV16mr [[COPY]], 1, $noreg, 0, $noreg, [[COPY4]] :: (store (s16) into %ir.2, align 4)
583
+ ; CHECK-NEXT: {{ $}}
584
+ ; CHECK-NEXT: bb.3.if.end:
585
+ ; CHECK-NEXT: [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
586
+ ; CHECK-NEXT: [[COPY5:%[0-9]+]]:gr16 = COPY [[MOV32r0_]].sub_16bit
587
+ ; CHECK-NEXT: $ax = COPY [[COPY5]]
588
+ ; CHECK-NEXT: RET 0, $ax
589
+ bb.0.entry:
590
+ successors: %bb.3(0x60000000), %bb.2(0x20000000)
591
+ liveins: $edi, $esi, $rdx
592
+
593
+ %3:gr64 = COPY $rdx
594
+ %2:gr32 = COPY $esi
595
+ %1:gr32 = COPY $edi
596
+ %4:gr16 = COPY %1.sub_16bit
597
+ TEST16rr %4, %4, implicit-def $eflags
598
+ JCC_1 %bb.2, 4, implicit $eflags
599
+ JMP_1 %bb.3
600
+
601
+ bb.3.entry:
602
+ successors: %bb.1(0x55555555), %bb.2(0x2aaaaaab)
603
+
604
+ %5:gr32 = AND32ri %2, 1234, implicit-def dead $eflags
605
+ %0:gr16 = COPY %5.sub_16bit
606
+ TEST16rr %0, %0, implicit-def $eflags
607
+ JCC_1 %bb.2, 9, implicit $eflags
608
+ JMP_1 %bb.1
609
+
610
+ bb.1.if.then:
611
+ successors: %bb.2(0x80000000)
612
+
613
+ MOV16mr %3, 1, $noreg, 0, $noreg, %0 :: (store (s16) into %ir.2, align 4)
473
614
474
615
bb.2.if.end:
475
616
%6:gr32 = MOV32r0 implicit-def dead $eflags
0 commit comments