Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / X86 / fixup-bw-copy.ll
blob73907d336b194b3b575c56fe2eae76a0693b29b1
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -fixup-byte-word-insts=1 -mtriple=x86_64-- < %s | FileCheck --check-prefix=X64 %s
3 ; RUN: llc -verify-machineinstrs -fixup-byte-word-insts=0 -mtriple=x86_64-- < %s | FileCheck --check-prefix=X64 %s
4 ; RUN: llc -verify-machineinstrs -fixup-byte-word-insts=1 -mtriple=i386-- < %s | FileCheck --check-prefixes=X32,BWON32 %s
5 ; RUN: llc -verify-machineinstrs -fixup-byte-word-insts=0 -mtriple=i386-- < %s | FileCheck --check-prefixes=X32,BWOFF32 %s
7 target datalayout = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128"
9 define i8 @test_movb(i8 %a0) nounwind {
10 ; X64-LABEL: test_movb:
11 ; X64:       # %bb.0:
12 ; X64-NEXT:    movl %edi, %eax
13 ; X64-NEXT:    # kill: def $al killed $al killed $eax
14 ; X64-NEXT:    retq
16 ; BWON32-LABEL: test_movb:
17 ; BWON32:       # %bb.0:
18 ; BWON32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
19 ; BWON32-NEXT:    retl
21 ; BWOFF32-LABEL: test_movb:
22 ; BWOFF32:       # %bb.0:
23 ; BWOFF32-NEXT:    movb {{[0-9]+}}(%esp), %al
24 ; BWOFF32-NEXT:    retl
25   ret i8 %a0
28 define i8 @test_movb_Os(i8 %a0) nounwind optsize {
29 ; X64-LABEL: test_movb_Os:
30 ; X64:       # %bb.0:
31 ; X64-NEXT:    movl %edi, %eax
32 ; X64-NEXT:    # kill: def $al killed $al killed $eax
33 ; X64-NEXT:    retq
35 ; X32-LABEL: test_movb_Os:
36 ; X32:       # %bb.0:
37 ; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
38 ; X32-NEXT:    retl
39   ret i8 %a0
42 define i8 @test_movb_Oz(i8 %a0) nounwind minsize {
43 ; X64-LABEL: test_movb_Oz:
44 ; X64:       # %bb.0:
45 ; X64-NEXT:    movl %edi, %eax
46 ; X64-NEXT:    # kill: def $al killed $al killed $eax
47 ; X64-NEXT:    retq
49 ; X32-LABEL: test_movb_Oz:
50 ; X32:       # %bb.0:
51 ; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
52 ; X32-NEXT:    retl
53   ret i8 %a0
56 define i16 @test_movw(i16 %a0) {
57 ; X64-LABEL: test_movw:
58 ; X64:       # %bb.0:
59 ; X64-NEXT:    movl %edi, %eax
60 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
61 ; X64-NEXT:    retq
63 ; BWON32-LABEL: test_movw:
64 ; BWON32:       # %bb.0:
65 ; BWON32-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
66 ; BWON32-NEXT:    retl
68 ; BWOFF32-LABEL: test_movw:
69 ; BWOFF32:       # %bb.0:
70 ; BWOFF32-NEXT:    movw {{[0-9]+}}(%esp), %ax
71 ; BWOFF32-NEXT:    retl
72   ret i16 %a0
75 ; Verify we don't mess with H-reg copies (only generated in 32-bit mode).
76 define i8 @test_movb_hreg(i16 %a0) {
77 ; X64-LABEL: test_movb_hreg:
78 ; X64:       # %bb.0:
79 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
80 ; X64-NEXT:    movl %edi, %eax
81 ; X64-NEXT:    shrl $8, %eax
82 ; X64-NEXT:    addl %edi, %eax
83 ; X64-NEXT:    # kill: def $al killed $al killed $eax
84 ; X64-NEXT:    retq
86 ; X32-LABEL: test_movb_hreg:
87 ; X32:       # %bb.0:
88 ; X32-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
89 ; X32-NEXT:    addb %al, %ah
90 ; X32-NEXT:    movb %ah, %al
91 ; X32-NEXT:    retl
92   %tmp0 = trunc i16 %a0 to i8
93   %tmp1 = lshr i16 %a0, 8
94   %tmp2 = trunc i16 %tmp1 to i8
95   %tmp3 = add i8 %tmp0, %tmp2
96   ret i8 %tmp3