1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 03:53:04 +02:00

[X86] Add test cases to show bad use of "and $0" and "orl $-1" for minsize when the store is volatile

If the store is volatile we shouldn't be adding a little that didn't exist in the source.

llvm-svn: 339040
This commit is contained in:
Craig Topper 2018-08-06 18:44:21 +00:00
parent 63084224da
commit 708c88cecf

View File

@ -141,3 +141,103 @@ entry:
ret void
}
; FIXME: Make sure we don't use the and/or trick on volatile stores.
define void @volatile_zero_64(i64* %p) minsize {
; CHECK32-LABEL: volatile_zero_64:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: andl $0, 4(%eax)
; CHECK32-NEXT: andl $0, (%eax)
; CHECK32-NEXT: retl
;
; CHECK64-LABEL: volatile_zero_64:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: andq $0, (%rdi)
; CHECK64-NEXT: retq
entry:
store volatile i64 0, i64* %p
ret void
}
define void @volatile_zero_32(i32* %p) minsize {
; CHECK32-LABEL: volatile_zero_32:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: andl $0, (%eax)
; CHECK32-NEXT: retl
;
; CHECK64-LABEL: volatile_zero_32:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: andl $0, (%rdi)
; CHECK64-NEXT: retq
entry:
store volatile i32 0, i32* %p
ret void
}
define void @volatile_zero_16(i16* %p) minsize {
; CHECK32-LABEL: volatile_zero_16:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: andw $0, (%eax)
; CHECK32-NEXT: retl
;
; CHECK64-LABEL: volatile_zero_16:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: andw $0, (%rdi)
; CHECK64-NEXT: retq
entry:
store volatile i16 0, i16* %p
ret void
}
define void @volatile_minus_one_64(i64* %p) minsize {
; CHECK32-LABEL: volatile_minus_one_64:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: orl $-1, 4(%eax)
; CHECK32-NEXT: orl $-1, (%eax)
; CHECK32-NEXT: retl
;
; CHECK64-LABEL: volatile_minus_one_64:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: orq $-1, (%rdi)
; CHECK64-NEXT: retq
entry:
store volatile i64 -1, i64* %p
ret void
}
define void @volatile_minus_one_32(i32* %p) minsize {
; CHECK32-LABEL: volatile_minus_one_32:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: orl $-1, (%eax)
; CHECK32-NEXT: retl
;
; CHECK64-LABEL: volatile_minus_one_32:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: orl $-1, (%rdi)
; CHECK64-NEXT: retq
entry:
store volatile i32 -1, i32* %p
ret void
}
define void @volatile_minus_one_16(i16* %p) minsize {
; CHECK32-LABEL: volatile_minus_one_16:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: orw $-1, (%eax)
; CHECK32-NEXT: retl
;
; CHECK64-LABEL: volatile_minus_one_16:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: orw $-1, (%rdi)
; CHECK64-NEXT: retq
entry:
store volatile i16 -1, i16* %p
ret void
}