[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / combine-bswap.ll
blobc30360fd77d575d6e0d73dd86d97254731a15279
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X86
3 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=X64
5 ; These tests just check that the plumbing is in place for @llvm.bswap. The
6 ; actual output is massive at the moment as llvm.bswap is not yet legal.
8 declare i32 @llvm.bswap.i32(i32) readnone
9 declare i32 @llvm.bswap.v4i32(i32) readnone
11 ; fold (bswap undef) -> undef
12 define i32 @test_undef() nounwind {
13 ; X86-LABEL: test_undef:
14 ; X86:       # %bb.0:
15 ; X86-NEXT:    retl
17 ; X64-LABEL: test_undef:
18 ; X64:       # %bb.0:
19 ; X64-NEXT:    retq
20   %b = call i32 @llvm.bswap.i32(i32 undef)
21   ret i32 %b
24 ; fold (bswap (bswap x)) -> x
25 define i32 @test_bswap_bswap(i32 %a0) nounwind {
26 ; X86-LABEL: test_bswap_bswap:
27 ; X86:       # %bb.0:
28 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
29 ; X86-NEXT:    retl
31 ; X64-LABEL: test_bswap_bswap:
32 ; X64:       # %bb.0:
33 ; X64-NEXT:    movl %edi, %eax
34 ; X64-NEXT:    retq
35   %b = call i32 @llvm.bswap.i32(i32 %a0)
36   %c = call i32 @llvm.bswap.i32(i32 %b)
37   ret i32 %c
40 define i32 @test_demandedbits_bswap(i32 %a0) nounwind {
41 ; X86-LABEL: test_demandedbits_bswap:
42 ; X86:       # %bb.0:
43 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
44 ; X86-NEXT:    bswapl %eax
45 ; X86-NEXT:    andl $-65536, %eax # imm = 0xFFFF0000
46 ; X86-NEXT:    retl
48 ; X64-LABEL: test_demandedbits_bswap:
49 ; X64:       # %bb.0:
50 ; X64-NEXT:    movl %edi, %eax
51 ; X64-NEXT:    bswapl %eax
52 ; X64-NEXT:    andl $-65536, %eax # imm = 0xFFFF0000
53 ; X64-NEXT:    retq
54   %b = or i32 %a0, 4278190080
55   %c = call i32 @llvm.bswap.i32(i32 %b)
56   %d = and i32 %c, 4294901760
57   ret i32 %d