[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / asm-mismatched-types.ll
blob97f9c0872f8f50db27bc719dbb68eb86eb544ecf
1 ; RUN: llc -o - %s -no-integrated-as | FileCheck %s
2 target triple = "x86_64--"
4 ; Allow to specify any of the 8/16/32/64 register names interchangeably in
5 ; constraints
7 ; Produced by C-programs like this:
8 ; void foo(int p) { register int reg __asm__("r8") = p;
9 ; __asm__ __volatile__("# REG: %0" : : "r" (reg)); }
11 ; CHECK-LABEL: reg64_as_32:
12 ; CHECK: # REG: %r8d
13 define void @reg64_as_32(i32 %p) {
14   call void asm sideeffect "# REG: $0", "{r8}"(i32 %p)
15   ret void
18 ; CHECK-LABEL: reg64_as_32_float:
19 ; CHECK: # REG: %r8d
20 define void @reg64_as_32_float(float %p) {
21   call void asm sideeffect "# REG: $0", "{r8}"(float %p)
22   ret void
25 ; CHECK-LABEL: reg64_as_16:
26 ; CHECK: # REG: %r9w
27 define void @reg64_as_16(i16 %p) {
28   call void asm sideeffect "# REG: $0", "{r9}"(i16 %p)
29   ret void
32 ; CHECK-LABEL: reg64_as_8:
33 ; CHECK: # REG: %bpl
34 define void @reg64_as_8(i8 %p) {
35   call void asm sideeffect "# REG: $0", "{rbp}"(i8 %p)
36   ret void
39 ; CHECK-LABEL: reg32_as_16:
40 ; CHECK: # REG: %r15w
41 define void @reg32_as_16(i16 %p) {
42   call void asm sideeffect "# REG: $0", "{r15d}"(i16 %p)
43   ret void
46 ; CHECK-LABEL: reg32_as_8:
47 ; CHECK: # REG: %r12b
48 define void @reg32_as_8(i8 %p) {
49   call void asm sideeffect "# REG: $0", "{r12d}"(i8 %p)
50   ret void
53 ; CHECK-LABEL: reg16_as_8:
54 ; CHECK: # REG: %cl
55 define void @reg16_as_8(i8 %p) {
56   call void asm sideeffect "# REG: $0", "{cx}"(i8 %p)
57   ret void
60 ; CHECK-LABEL: reg32_as_64:
61 ; CHECK: # REG: %rbp
62 define void @reg32_as_64(i64 %p) {
63   call void asm sideeffect "# REG: $0", "{ebp}"(i64 %p)
64   ret void
67 ; CHECK-LABEL: reg32_as_64_float:
68 ; CHECK: # REG: %rbp
69 define void @reg32_as_64_float(double %p) {
70   call void asm sideeffect "# REG: $0", "{ebp}"(double %p)
71   ret void
74 ; CHECK-LABEL: reg16_as_64:
75 ; CHECK: # REG: %r13
76 define void @reg16_as_64(i64 %p) {
77   call void asm sideeffect "# REG: $0", "{r13w}"(i64 %p)
78   ret void
81 ; CHECK-LABEL: reg16_as_64_float:
82 ; CHECK: # REG: %r13
83 define void @reg16_as_64_float(double %p) {
84   call void asm sideeffect "# REG: $0", "{r13w}"(double %p)
85   ret void
88 ; CHECK-LABEL: reg8_as_64:
89 ; CHECK: # REG: %rax
90 define void @reg8_as_64(i64 %p) {
91   call void asm sideeffect "# REG: $0", "{al}"(i64 %p)
92   ret void
95 ; CHECK-LABEL: reg8_as_64_float:
96 ; CHECK: # REG: %rax
97 define void @reg8_as_64_float(double %p) {
98   call void asm sideeffect "# REG: $0", "{al}"(double %p)
99   ret void
102 ; CHECK-LABEL: reg16_as_32:
103 ; CHECK: # REG: %r11d
104 define void @reg16_as_32(i32 %p) {
105   call void asm sideeffect "# REG: $0", "{r11w}"(i32 %p)
106   ret void
109 ; CHECK-LABEL: reg16_as_32_float:
110 ; CHECK: # REG: %r11d
111 define void @reg16_as_32_float(float %p) {
112   call void asm sideeffect "# REG: $0", "{r11w}"(float %p)
113   ret void
116 ; CHECK-LABEL: reg8_as_32:
117 ; CHECK: # REG: %r9d
118 define void @reg8_as_32(i32 %p) {
119   call void asm sideeffect "# REG: $0", "{r9b}"(i32 %p)
120   ret void
123 ; CHECK-LABEL: reg8_as_32_float:
124 ; CHECK: # REG: %r9d
125 define void @reg8_as_32_float(float %p) {
126   call void asm sideeffect "# REG: $0", "{r9b}"(float %p)
127   ret void
130 ; CHECK-LABEL: reg8_as_16:
131 ; CHECK: # REG: %di
132 define void @reg8_as_16(i16 %p) {
133   call void asm sideeffect "# REG: $0", "{dil}"(i16 %p)
134   ret void