1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 19:42:54 +02:00
llvm-mirror/test/CodeGen/X86/store-zero-and-minus-one.ll
Hans Wennborg 45f934c834 [X86] Use "and $0" and "orl $-1" to store 0 and -1 when optimizing for minsize
64-bit, 32-bit and 16-bit move-immediate instructions are 7, 6, and 5 bytes,
respectively, whereas and/or with 8-bit immediate is only three bytes.

Since these instructions imply an additional memory read (which the CPU could
elide, but we don't think it does), restrict these patterns to minsize functions.

Differential Revision: http://reviews.llvm.org/D18374

llvm-svn: 264440
2016-03-25 18:11:31 +00:00

89 lines
1.4 KiB
LLVM

; RUN: llc -mtriple=i686-unknown-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK32 --check-prefix=CHECK
; RUN: llc -mtriple=x86_64-unknown-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK64 --check-prefix=CHECK
define void @zero_optsize(i32* %p) optsize {
entry:
store i32 0, i32* %p
ret void
; CHECK-LABEL: zero_optsize:
; CHECK: movl $0
; CHECK: ret
}
define void @minus_one_optsize(i32* %p) optsize {
entry:
store i32 -1, i32* %p
ret void
; CHECK-LABEL: minus_one_optsize:
; CHECK: movl $-1
; CHECK: ret
}
define void @zero_64(i64* %p) minsize {
entry:
store i64 0, i64* %p
ret void
; CHECK-LABEL: zero_64:
; CHECK32: andl $0
; CHECK32: andl $0
; CHECK64: andq $0
; CHECK: ret
}
define void @zero_32(i32* %p) minsize {
entry:
store i32 0, i32* %p
ret void
; CHECK-LABEL: zero_32:
; CHECK: andl $0
; CHECK: ret
}
define void @zero_16(i16* %p) minsize {
entry:
store i16 0, i16* %p
ret void
; CHECK-LABEL: zero_16:
; CHECK: andw $0
; CHECK: ret
}
define void @minus_one_64(i64* %p) minsize {
entry:
store i64 -1, i64* %p
ret void
; CHECK-LABEL: minus_one_64:
; CHECK32: orl $-1
; CHECK32: orl $-1
; CHECK64: orq $-1
; CHECK: ret
}
define void @minus_one_32(i32* %p) minsize {
entry:
store i32 -1, i32* %p
ret void
; CHECK-LABEL: minus_one_32:
; CHECK: orl $-1
; CHECK: ret
}
define void @minus_one_16(i16* %p) minsize {
entry:
store i16 -1, i16* %p
ret void
; CHECK-LABEL: minus_one_16:
; CHECK: orw $-1
; CHECK: ret
}