Skip to content

Commit 4d0f79e

Browse files
committed
Pre commit test cases SRL/SRA support in canCreateUndefOrPoison. NFC
Add test cases to show that we can't push freeze through SRA/SRL with 'exact' flag when there are multiple uses.
1 parent 3238b92 commit 4d0f79e

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

llvm/test/CodeGen/X86/freeze-binary.ll

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,30 @@ define i32 @freeze_ashr_exact(i32 %a0) nounwind {
488488
ret i32 %z
489489
}
490490

491+
define i32 @freeze_ashr_exact_extra_use(i32 %a0, ptr %escape) nounwind {
492+
; X86-LABEL: freeze_ashr_exact_extra_use:
493+
; X86: # %bb.0:
494+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
495+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
496+
; X86-NEXT: sarl $3, %eax
497+
; X86-NEXT: movl %eax, (%ecx)
498+
; X86-NEXT: sarl $6, %eax
499+
; X86-NEXT: retl
500+
;
501+
; X64-LABEL: freeze_ashr_exact_extra_use:
502+
; X64: # %bb.0:
503+
; X64-NEXT: movl %edi, %eax
504+
; X64-NEXT: sarl $3, %eax
505+
; X64-NEXT: movl %eax, (%rsi)
506+
; X64-NEXT: sarl $6, %eax
507+
; X64-NEXT: retq
508+
%x = ashr exact i32 %a0, 3
509+
%y = freeze i32 %x
510+
%z = ashr i32 %y, 6
511+
store i32 %x, ptr %escape
512+
ret i32 %z
513+
}
514+
491515
define i32 @freeze_ashr_outofrange(i32 %a0) nounwind {
492516
; X86-LABEL: freeze_ashr_outofrange:
493517
; X86: # %bb.0:
@@ -597,6 +621,30 @@ define i32 @freeze_lshr_exact(i32 %a0) nounwind {
597621
ret i32 %z
598622
}
599623

624+
define i32 @freeze_lshr_exact_extra_use(i32 %a0, ptr %escape) nounwind {
625+
; X86-LABEL: freeze_lshr_exact_extra_use:
626+
; X86: # %bb.0:
627+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
628+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
629+
; X86-NEXT: shrl $3, %eax
630+
; X86-NEXT: movl %eax, (%ecx)
631+
; X86-NEXT: shrl $5, %eax
632+
; X86-NEXT: retl
633+
;
634+
; X64-LABEL: freeze_lshr_exact_extra_use:
635+
; X64: # %bb.0:
636+
; X64-NEXT: movl %edi, %eax
637+
; X64-NEXT: shrl $3, %eax
638+
; X64-NEXT: movl %eax, (%rsi)
639+
; X64-NEXT: shrl $5, %eax
640+
; X64-NEXT: retq
641+
%x = lshr exact i32 %a0, 3
642+
%y = freeze i32 %x
643+
%z = lshr i32 %y, 5
644+
store i32 %x, ptr %escape
645+
ret i32 %z
646+
}
647+
600648
define i32 @freeze_lshr_outofrange(i32 %a0) nounwind {
601649
; X86-LABEL: freeze_lshr_outofrange:
602650
; X86: # %bb.0:

0 commit comments

Comments
 (0)