mirror of
https://github.com/RPCS3/llvm.git
synced 2025-05-13 08:56:04 +00:00
[X86] Add MOVBE targets to load combine tests
Test folded endian swap tests with MOVBE instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295508 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4d5bc87951
commit
6bd44f2375
@ -1,6 +1,8 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=CHECK64
|
||||
; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=CHECK --check-prefix=BSWAP
|
||||
; RUN: llc < %s -mtriple=i686-unknown -mattr=+movbe | FileCheck %s --check-prefix=CHECK --check-prefix=MOVBE
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=CHECK64 --check-prefix=BSWAP64
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+movbe | FileCheck %s --check-prefix=CHECK64 --check-prefix=MOVBE64
|
||||
|
||||
; i8* p;
|
||||
; (i32) p[0] | ((i32) p[1] << 8) | ((i32) p[2] << 16) | ((i32) p[3] << 24)
|
||||
@ -15,7 +17,6 @@ define i32 @load_i32_by_i8(i32* %arg) {
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl (%rdi), %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = load i8, i8* %tmp, align 1
|
||||
%tmp2 = zext i8 %tmp1 to i32
|
||||
@ -40,19 +41,29 @@ define i32 @load_i32_by_i8(i32* %arg) {
|
||||
; i8* p;
|
||||
; ((i32) p[0] << 24) | ((i32) p[1] << 16) | ((i32) p[2] << 8) | (i32) p[3]
|
||||
define i32 @load_i32_by_i8_bswap(i32* %arg) {
|
||||
; CHECK-LABEL: load_i32_by_i8_bswap:
|
||||
; CHECK: # BB#0:
|
||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; CHECK-NEXT: movl (%eax), %eax
|
||||
; CHECK-NEXT: bswapl %eax
|
||||
; CHECK-NEXT: retl
|
||||
; BSWAP-LABEL: load_i32_by_i8_bswap:
|
||||
; BSWAP: # BB#0:
|
||||
; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; BSWAP-NEXT: movl (%eax), %eax
|
||||
; BSWAP-NEXT: bswapl %eax
|
||||
; BSWAP-NEXT: retl
|
||||
;
|
||||
; CHECK64-LABEL: load_i32_by_i8_bswap:
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl (%rdi), %eax
|
||||
; CHECK64-NEXT: bswapl %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
; MOVBE-LABEL: load_i32_by_i8_bswap:
|
||||
; MOVBE: # BB#0:
|
||||
; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; MOVBE-NEXT: movbel (%eax), %eax
|
||||
; MOVBE-NEXT: retl
|
||||
;
|
||||
; BSWAP64-LABEL: load_i32_by_i8_bswap:
|
||||
; BSWAP64: # BB#0:
|
||||
; BSWAP64-NEXT: movl (%rdi), %eax
|
||||
; BSWAP64-NEXT: bswapl %eax
|
||||
; BSWAP64-NEXT: retq
|
||||
;
|
||||
; MOVBE64-LABEL: load_i32_by_i8_bswap:
|
||||
; MOVBE64: # BB#0:
|
||||
; MOVBE64-NEXT: movbel (%rdi), %eax
|
||||
; MOVBE64-NEXT: retq
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = load i8, i8* %tmp, align 1
|
||||
%tmp2 = zext i8 %tmp1 to i32
|
||||
@ -87,7 +98,6 @@ define i32 @load_i32_by_i16(i32* %arg) {
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl (%rdi), %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i16*
|
||||
%tmp1 = load i16, i16* %tmp, align 1
|
||||
%tmp2 = zext i16 %tmp1 to i32
|
||||
@ -113,7 +123,6 @@ define i32 @load_i32_by_i16_i8(i32* %arg) {
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl (%rdi), %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i16*
|
||||
%tmp1 = bitcast i32* %arg to i8*
|
||||
%tmp2 = load i16, i16* %tmp, align 1
|
||||
@ -145,7 +154,6 @@ define i32 @load_i32_by_i16_by_i8(i32* %arg) {
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl (%rdi), %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = load i8, i8* %tmp, align 1
|
||||
%tmp2 = zext i8 %tmp1 to i16
|
||||
@ -172,19 +180,29 @@ define i32 @load_i32_by_i16_by_i8(i32* %arg) {
|
||||
; i8* p;
|
||||
; ((i32) (((i16) p[0] << 8) | (i16) p[1]) << 16) | (i32) (((i16) p[3] << 8) | (i16) p[4])
|
||||
define i32 @load_i32_by_i16_by_i8_bswap(i32* %arg) {
|
||||
; CHECK-LABEL: load_i32_by_i16_by_i8_bswap:
|
||||
; CHECK: # BB#0:
|
||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; CHECK-NEXT: movl (%eax), %eax
|
||||
; CHECK-NEXT: bswapl %eax
|
||||
; CHECK-NEXT: retl
|
||||
; BSWAP-LABEL: load_i32_by_i16_by_i8_bswap:
|
||||
; BSWAP: # BB#0:
|
||||
; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; BSWAP-NEXT: movl (%eax), %eax
|
||||
; BSWAP-NEXT: bswapl %eax
|
||||
; BSWAP-NEXT: retl
|
||||
;
|
||||
; CHECK64-LABEL: load_i32_by_i16_by_i8_bswap:
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl (%rdi), %eax
|
||||
; CHECK64-NEXT: bswapl %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
; MOVBE-LABEL: load_i32_by_i16_by_i8_bswap:
|
||||
; MOVBE: # BB#0:
|
||||
; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; MOVBE-NEXT: movbel (%eax), %eax
|
||||
; MOVBE-NEXT: retl
|
||||
;
|
||||
; BSWAP64-LABEL: load_i32_by_i16_by_i8_bswap:
|
||||
; BSWAP64: # BB#0:
|
||||
; BSWAP64-NEXT: movl (%rdi), %eax
|
||||
; BSWAP64-NEXT: bswapl %eax
|
||||
; BSWAP64-NEXT: retq
|
||||
;
|
||||
; MOVBE64-LABEL: load_i32_by_i16_by_i8_bswap:
|
||||
; MOVBE64: # BB#0:
|
||||
; MOVBE64-NEXT: movbel (%rdi), %eax
|
||||
; MOVBE64-NEXT: retq
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = load i8, i8* %tmp, align 1
|
||||
%tmp2 = zext i8 %tmp1 to i16
|
||||
@ -222,7 +240,6 @@ define i64 @load_i64_by_i8(i64* %arg) {
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movq (%rdi), %rax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i64* %arg to i8*
|
||||
%tmp1 = load i8, i8* %tmp, align 1
|
||||
%tmp2 = zext i8 %tmp1 to i64
|
||||
@ -267,21 +284,32 @@ define i64 @load_i64_by_i8(i64* %arg) {
|
||||
; i8* p;
|
||||
; ((i64) p[0] << 56) | ((i64) p[1] << 48) | ((i64) p[2] << 40) | ((i64) p[3] << 32) | ((i64) p[4] << 24) | ((i64) p[5] << 16) | ((i64) p[6] << 8) | (i64) p[7]
|
||||
define i64 @load_i64_by_i8_bswap(i64* %arg) {
|
||||
; CHECK-LABEL: load_i64_by_i8_bswap:
|
||||
; CHECK: # BB#0:
|
||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; CHECK-NEXT: movl (%eax), %edx
|
||||
; CHECK-NEXT: movl 4(%eax), %eax
|
||||
; CHECK-NEXT: bswapl %eax
|
||||
; CHECK-NEXT: bswapl %edx
|
||||
; CHECK-NEXT: retl
|
||||
; BSWAP-LABEL: load_i64_by_i8_bswap:
|
||||
; BSWAP: # BB#0:
|
||||
; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; BSWAP-NEXT: movl (%eax), %edx
|
||||
; BSWAP-NEXT: movl 4(%eax), %eax
|
||||
; BSWAP-NEXT: bswapl %eax
|
||||
; BSWAP-NEXT: bswapl %edx
|
||||
; BSWAP-NEXT: retl
|
||||
;
|
||||
; CHECK64-LABEL: load_i64_by_i8_bswap:
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movq (%rdi), %rax
|
||||
; CHECK64-NEXT: bswapq %rax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
; MOVBE-LABEL: load_i64_by_i8_bswap:
|
||||
; MOVBE: # BB#0:
|
||||
; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; MOVBE-NEXT: movbel 4(%ecx), %eax
|
||||
; MOVBE-NEXT: movbel (%ecx), %edx
|
||||
; MOVBE-NEXT: retl
|
||||
;
|
||||
; BSWAP64-LABEL: load_i64_by_i8_bswap:
|
||||
; BSWAP64: # BB#0:
|
||||
; BSWAP64-NEXT: movq (%rdi), %rax
|
||||
; BSWAP64-NEXT: bswapq %rax
|
||||
; BSWAP64-NEXT: retq
|
||||
;
|
||||
; MOVBE64-LABEL: load_i64_by_i8_bswap:
|
||||
; MOVBE64: # BB#0:
|
||||
; MOVBE64-NEXT: movbeq (%rdi), %rax
|
||||
; MOVBE64-NEXT: retq
|
||||
%tmp = bitcast i64* %arg to i8*
|
||||
%tmp1 = load i8, i8* %tmp, align 1
|
||||
%tmp2 = zext i8 %tmp1 to i64
|
||||
@ -367,7 +395,6 @@ define i32 @load_i32_by_i8_bswap_uses(i32* %arg) {
|
||||
; CHECK64-NEXT: orl %esi, %eax
|
||||
; CHECK64-NEXT: orl %ecx, %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = load i8, i8* %tmp, align 1
|
||||
%tmp2 = zext i8 %tmp1 to i32
|
||||
@ -424,7 +451,6 @@ define i32 @load_i32_by_i8_bswap_volatile(i32* %arg) {
|
||||
; CHECK64-NEXT: movzbl 3(%rdi), %eax
|
||||
; CHECK64-NEXT: orl %edx, %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = load volatile i8, i8* %tmp, align 1
|
||||
%tmp2 = zext i8 %tmp1 to i32
|
||||
@ -490,7 +516,6 @@ define i32 @load_i32_by_i8_bswap_store_in_between(i32* %arg, i32* %arg1) {
|
||||
; CHECK64-NEXT: movzbl 3(%rdi), %eax
|
||||
; CHECK64-NEXT: orl %edx, %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp2 = load i8, i8* %tmp, align 1
|
||||
%tmp3 = zext i8 %tmp2 to i32
|
||||
@ -547,7 +572,6 @@ define i32 @load_i32_by_i8_bswap_unrelated_load(i32* %arg, i32* %arg1) {
|
||||
; CHECK64-NEXT: movzbl 3(%rdi), %eax
|
||||
; CHECK64-NEXT: orl %edx, %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp2 = bitcast i32* %arg1 to i8*
|
||||
%tmp3 = load i8, i8* %tmp, align 1
|
||||
@ -584,7 +608,6 @@ define i32 @load_i32_by_i8_nonzero_offset(i32* %arg) {
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl 1(%rdi), %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = getelementptr inbounds i8, i8* %tmp, i32 1
|
||||
%tmp2 = load i8, i8* %tmp1, align 1
|
||||
@ -620,7 +643,6 @@ define i32 @load_i32_by_i8_neg_offset(i32* %arg) {
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl -4(%rdi), %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = getelementptr inbounds i8, i8* %tmp, i32 -4
|
||||
%tmp2 = load i8, i8* %tmp1, align 1
|
||||
@ -646,19 +668,29 @@ define i32 @load_i32_by_i8_neg_offset(i32* %arg) {
|
||||
; i8* p;
|
||||
; (i32) p[4] | ((i32) p[3] << 8) | ((i32) p[2] << 16) | ((i32) p[1] << 24)
|
||||
define i32 @load_i32_by_i8_nonzero_offset_bswap(i32* %arg) {
|
||||
; CHECK-LABEL: load_i32_by_i8_nonzero_offset_bswap:
|
||||
; CHECK: # BB#0:
|
||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; CHECK-NEXT: movl 1(%eax), %eax
|
||||
; CHECK-NEXT: bswapl %eax
|
||||
; CHECK-NEXT: retl
|
||||
; BSWAP-LABEL: load_i32_by_i8_nonzero_offset_bswap:
|
||||
; BSWAP: # BB#0:
|
||||
; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; BSWAP-NEXT: movl 1(%eax), %eax
|
||||
; BSWAP-NEXT: bswapl %eax
|
||||
; BSWAP-NEXT: retl
|
||||
;
|
||||
; CHECK64-LABEL: load_i32_by_i8_nonzero_offset_bswap:
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl 1(%rdi), %eax
|
||||
; CHECK64-NEXT: bswapl %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
; MOVBE-LABEL: load_i32_by_i8_nonzero_offset_bswap:
|
||||
; MOVBE: # BB#0:
|
||||
; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; MOVBE-NEXT: movbel 1(%eax), %eax
|
||||
; MOVBE-NEXT: retl
|
||||
;
|
||||
; BSWAP64-LABEL: load_i32_by_i8_nonzero_offset_bswap:
|
||||
; BSWAP64: # BB#0:
|
||||
; BSWAP64-NEXT: movl 1(%rdi), %eax
|
||||
; BSWAP64-NEXT: bswapl %eax
|
||||
; BSWAP64-NEXT: retq
|
||||
;
|
||||
; MOVBE64-LABEL: load_i32_by_i8_nonzero_offset_bswap:
|
||||
; MOVBE64: # BB#0:
|
||||
; MOVBE64-NEXT: movbel 1(%rdi), %eax
|
||||
; MOVBE64-NEXT: retq
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = getelementptr inbounds i8, i8* %tmp, i32 4
|
||||
%tmp2 = load i8, i8* %tmp1, align 1
|
||||
@ -684,19 +716,29 @@ define i32 @load_i32_by_i8_nonzero_offset_bswap(i32* %arg) {
|
||||
; i8* p;
|
||||
; (i32) p[-1] | ((i32) p[-2] << 8) | ((i32) p[-3] << 16) | ((i32) p[-4] << 24)
|
||||
define i32 @load_i32_by_i8_neg_offset_bswap(i32* %arg) {
|
||||
; CHECK-LABEL: load_i32_by_i8_neg_offset_bswap:
|
||||
; CHECK: # BB#0:
|
||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; CHECK-NEXT: movl -4(%eax), %eax
|
||||
; CHECK-NEXT: bswapl %eax
|
||||
; CHECK-NEXT: retl
|
||||
; BSWAP-LABEL: load_i32_by_i8_neg_offset_bswap:
|
||||
; BSWAP: # BB#0:
|
||||
; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; BSWAP-NEXT: movl -4(%eax), %eax
|
||||
; BSWAP-NEXT: bswapl %eax
|
||||
; BSWAP-NEXT: retl
|
||||
;
|
||||
; CHECK64-LABEL: load_i32_by_i8_neg_offset_bswap:
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl -4(%rdi), %eax
|
||||
; CHECK64-NEXT: bswapl %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
; MOVBE-LABEL: load_i32_by_i8_neg_offset_bswap:
|
||||
; MOVBE: # BB#0:
|
||||
; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; MOVBE-NEXT: movbel -4(%eax), %eax
|
||||
; MOVBE-NEXT: retl
|
||||
;
|
||||
; BSWAP64-LABEL: load_i32_by_i8_neg_offset_bswap:
|
||||
; BSWAP64: # BB#0:
|
||||
; BSWAP64-NEXT: movl -4(%rdi), %eax
|
||||
; BSWAP64-NEXT: bswapl %eax
|
||||
; BSWAP64-NEXT: retq
|
||||
;
|
||||
; MOVBE64-LABEL: load_i32_by_i8_neg_offset_bswap:
|
||||
; MOVBE64: # BB#0:
|
||||
; MOVBE64-NEXT: movbel -4(%rdi), %eax
|
||||
; MOVBE64-NEXT: retq
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp1 = getelementptr inbounds i8, i8* %tmp, i32 -1
|
||||
%tmp2 = load i8, i8* %tmp1, align 1
|
||||
@ -722,20 +764,33 @@ define i32 @load_i32_by_i8_neg_offset_bswap(i32* %arg) {
|
||||
; i8* p; i32 i;
|
||||
; ((i32) p[i] << 24) | ((i32) p[i + 1] << 16) | ((i32) p[i + 2] << 8) | (i32) p[i + 3]
|
||||
define i32 @load_i32_by_i8_bswap_base_index_offset(i32* %arg, i32 %arg1) {
|
||||
; CHECK-LABEL: load_i32_by_i8_bswap_base_index_offset:
|
||||
; CHECK: # BB#0:
|
||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; CHECK-NEXT: movl (%ecx,%eax), %eax
|
||||
; CHECK-NEXT: bswapl %eax
|
||||
; CHECK-NEXT: retl
|
||||
; BSWAP-LABEL: load_i32_by_i8_bswap_base_index_offset:
|
||||
; BSWAP: # BB#0:
|
||||
; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; BSWAP-NEXT: movl (%ecx,%eax), %eax
|
||||
; BSWAP-NEXT: bswapl %eax
|
||||
; BSWAP-NEXT: retl
|
||||
;
|
||||
; CHECK64-LABEL: load_i32_by_i8_bswap_base_index_offset:
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movslq %esi, %rax
|
||||
; CHECK64-NEXT: movl (%rdi,%rax), %eax
|
||||
; CHECK64-NEXT: bswapl %eax
|
||||
; CHECK64-NEXT: retq
|
||||
; MOVBE-LABEL: load_i32_by_i8_bswap_base_index_offset:
|
||||
; MOVBE: # BB#0:
|
||||
; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; MOVBE-NEXT: movbel (%ecx,%eax), %eax
|
||||
; MOVBE-NEXT: retl
|
||||
;
|
||||
; BSWAP64-LABEL: load_i32_by_i8_bswap_base_index_offset:
|
||||
; BSWAP64: # BB#0:
|
||||
; BSWAP64-NEXT: movslq %esi, %rax
|
||||
; BSWAP64-NEXT: movl (%rdi,%rax), %eax
|
||||
; BSWAP64-NEXT: bswapl %eax
|
||||
; BSWAP64-NEXT: retq
|
||||
;
|
||||
; MOVBE64-LABEL: load_i32_by_i8_bswap_base_index_offset:
|
||||
; MOVBE64: # BB#0:
|
||||
; MOVBE64-NEXT: movslq %esi, %rax
|
||||
; MOVBE64-NEXT: movbel (%rdi,%rax), %eax
|
||||
; MOVBE64-NEXT: retq
|
||||
%tmp = bitcast i32* %arg to i8*
|
||||
%tmp2 = getelementptr inbounds i8, i8* %tmp, i32 %arg1
|
||||
%tmp3 = load i8, i8* %tmp2, align 1
|
||||
@ -794,20 +849,29 @@ declare i16 @llvm.bswap.i16(i16)
|
||||
; i16* p;
|
||||
; (i32) bswap(p[1]) | (i32) bswap(p[0] << 16)
|
||||
define i32 @load_i32_by_bswap_i16(i32* %arg) {
|
||||
; CHECK-LABEL: load_i32_by_bswap_i16:
|
||||
; CHECK: # BB#0:
|
||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; CHECK-NEXT: movl (%eax), %eax
|
||||
; CHECK-NEXT: bswapl %eax
|
||||
; CHECK-NEXT: retl
|
||||
; BSWAP-LABEL: load_i32_by_bswap_i16:
|
||||
; BSWAP: # BB#0:
|
||||
; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; BSWAP-NEXT: movl (%eax), %eax
|
||||
; BSWAP-NEXT: bswapl %eax
|
||||
; BSWAP-NEXT: retl
|
||||
;
|
||||
; CHECK64-LABEL: load_i32_by_bswap_i16:
|
||||
; CHECK64: # BB#0:
|
||||
; CHECK64-NEXT: movl (%rdi), %eax
|
||||
; CHECK64-NEXT: bswapl %eax
|
||||
; CHECK64-NEXT: retq
|
||||
|
||||
|
||||
; MOVBE-LABEL: load_i32_by_bswap_i16:
|
||||
; MOVBE: # BB#0:
|
||||
; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; MOVBE-NEXT: movbel (%eax), %eax
|
||||
; MOVBE-NEXT: retl
|
||||
;
|
||||
; BSWAP64-LABEL: load_i32_by_bswap_i16:
|
||||
; BSWAP64: # BB#0:
|
||||
; BSWAP64-NEXT: movl (%rdi), %eax
|
||||
; BSWAP64-NEXT: bswapl %eax
|
||||
; BSWAP64-NEXT: retq
|
||||
;
|
||||
; MOVBE64-LABEL: load_i32_by_bswap_i16:
|
||||
; MOVBE64: # BB#0:
|
||||
; MOVBE64-NEXT: movbel (%rdi), %eax
|
||||
; MOVBE64-NEXT: retq
|
||||
%tmp = bitcast i32* %arg to i16*
|
||||
%tmp1 = load i16, i16* %tmp, align 4
|
||||
%tmp11 = call i16 @llvm.bswap.i16(i16 %tmp1)
|
||||
|
Loading…
x
Reference in New Issue
Block a user