summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/freeze-binary.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/freeze-binary.ll')
-rw-r--r--llvm/test/CodeGen/X86/freeze-binary.ll48
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/freeze-binary.ll b/llvm/test/CodeGen/X86/freeze-binary.ll
index defd81e6ab77..b212e9438e1b 100644
--- a/llvm/test/CodeGen/X86/freeze-binary.ll
+++ b/llvm/test/CodeGen/X86/freeze-binary.ll
@@ -488,6 +488,30 @@ define i32 @freeze_ashr_exact(i32 %a0) nounwind {
ret i32 %z
}
+define i32 @freeze_ashr_exact_extra_use(i32 %a0, ptr %escape) nounwind {
+; X86-LABEL: freeze_ashr_exact_extra_use:
+; X86: # %bb.0:
+; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: sarl $3, %eax
+; X86-NEXT: movl %eax, (%ecx)
+; X86-NEXT: sarl $6, %eax
+; X86-NEXT: retl
+;
+; X64-LABEL: freeze_ashr_exact_extra_use:
+; X64: # %bb.0:
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: sarl $3, %eax
+; X64-NEXT: movl %eax, (%rsi)
+; X64-NEXT: sarl $6, %eax
+; X64-NEXT: retq
+ %x = ashr exact i32 %a0, 3
+ %y = freeze i32 %x
+ %z = ashr i32 %y, 6
+ store i32 %x, ptr %escape
+ ret i32 %z
+}
+
define i32 @freeze_ashr_outofrange(i32 %a0) nounwind {
; X86-LABEL: freeze_ashr_outofrange:
; X86: # %bb.0:
@@ -597,6 +621,30 @@ define i32 @freeze_lshr_exact(i32 %a0) nounwind {
ret i32 %z
}
+define i32 @freeze_lshr_exact_extra_use(i32 %a0, ptr %escape) nounwind {
+; X86-LABEL: freeze_lshr_exact_extra_use:
+; X86: # %bb.0:
+; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: shrl $3, %eax
+; X86-NEXT: movl %eax, (%ecx)
+; X86-NEXT: shrl $5, %eax
+; X86-NEXT: retl
+;
+; X64-LABEL: freeze_lshr_exact_extra_use:
+; X64: # %bb.0:
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: shrl $3, %eax
+; X64-NEXT: movl %eax, (%rsi)
+; X64-NEXT: shrl $5, %eax
+; X64-NEXT: retq
+ %x = lshr exact i32 %a0, 3
+ %y = freeze i32 %x
+ %z = lshr i32 %y, 5
+ store i32 %x, ptr %escape
+ ret i32 %z
+}
+
define i32 @freeze_lshr_outofrange(i32 %a0) nounwind {
; X86-LABEL: freeze_lshr_outofrange:
; X86: # %bb.0: