diff options
| author | Amaury Sechet <deadalnix@gmail.com> | 2019-09-30 22:52:28 +0000 |
|---|---|---|
| committer | Amaury Sechet <deadalnix@gmail.com> | 2019-09-30 22:52:28 +0000 |
| commit | d60c297d1d31b538784220ebb11d4c1b9ffd614e (patch) | |
| tree | 7dda2e0ec2cb74774e3e93010f98b336b70be56b | |
| parent | e6f98c0073a78c89cfcba4eaacbc3eec83923719 (diff) | |
| download | llvm-d60c297d1d31b538784220ebb11d4c1b9ffd614e.zip llvm-d60c297d1d31b538784220ebb11d4c1b9ffd614e.tar.gz llvm-d60c297d1d31b538784220ebb11d4c1b9ffd614e.tar.bz2 | |
Add partial bswap test to the X86 backend. NFC
llvm-svn: 373271
| -rw-r--r-- | llvm/test/CodeGen/X86/bswap_tree.ll | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/bswap_tree.ll b/llvm/test/CodeGen/X86/bswap_tree.ll index 537acdb..79a4505 100644 --- a/llvm/test/CodeGen/X86/bswap_tree.ll +++ b/llvm/test/CodeGen/X86/bswap_tree.ll @@ -70,3 +70,47 @@ define i32 @test2(i32 %x) nounwind { %result = or i32 %or0, %or1 ret i32 %result } + +declare i32 @llvm.bswap.i32(i32) + +; Match a 32-bit packed halfword bswap, with some subtree +; already converted to a bswap. +define i32 @test3(i32 %x) nounwind { +; CHECK-LABEL: test3: +; CHECK: # %bb.0: +; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: movl %eax, %ecx +; CHECK-NEXT: andl $16711680, %ecx # imm = 0xFF0000 +; CHECK-NEXT: movl %eax, %edx +; CHECK-NEXT: andl $-16777216, %edx # imm = 0xFF000000 +; CHECK-NEXT: shll $8, %ecx +; CHECK-NEXT: shrl $8, %edx +; CHECK-NEXT: orl %ecx, %edx +; CHECK-NEXT: bswapl %eax +; CHECK-NEXT: shrl $16, %eax +; CHECK-NEXT: orl %edx, %eax +; CHECK-NEXT: retl +; +; CHECK64-LABEL: test3: +; CHECK64: # %bb.0: +; CHECK64-NEXT: movl %edi, %eax +; CHECK64-NEXT: andl $16711680, %eax # imm = 0xFF0000 +; CHECK64-NEXT: movl %edi, %ecx +; CHECK64-NEXT: andl $-16777216, %ecx # imm = 0xFF000000 +; CHECK64-NEXT: shll $8, %eax +; CHECK64-NEXT: shrl $8, %ecx +; CHECK64-NEXT: addl %ecx, %eax +; CHECK64-NEXT: bswapl %edi +; CHECK64-NEXT: shrl $16, %edi +; CHECK64-NEXT: orl %edi, %eax +; CHECK64-NEXT: retq + %byte2 = and i32 %x, 16711680 ; 0x00ff0000 + %byte3 = and i32 %x, 4278190080 ; 0xff000000 + %1 = shl i32 %byte2, 8 + %2 = lshr i32 %byte3, 8 + %or = or i32 %1, %2 + %bswap = call i32 @llvm.bswap.i32(i32 %x) + %3 = lshr i32 %bswap, 16 + %result = or i32 %or, %3 + ret i32 %result +} |
