1; RUN: llvm-ml -m64 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-64,CHECK 2; RUN: llvm-ml -m32 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-32,CHECK 3 4ifdef rax 5 extern fn_ref_extern : qword 6else 7 extern fn_ref_extern : dword 8endif 9 10extern fn_proc_extern : proc 11extern fn_ref_extern_word : word 12 13.data 14 15ifdef rax 16 fn_ref qword 1 17else 18 fn_ref dword 1 19endif 20 21fn_ref_word word 2 22fn PROC 23 24BranchTargetStruc struc 25 member0 dword ? 26 ifdef rax 27 member1 dword ? 28 endif 29BranchTargetStruc ends 30 31 32ifdef rax 33 fn_ref_struc BranchTargetStruc {3, 3} 34else 35 fn_ref_struc BranchTargetStruc {3} 36endif 37 38.code 39 40t0: 41call fn_ref 42jmp fn_ref 43; CHECK-LABEL: t0: 44; CHECK-64: call qword ptr [rip + fn_ref] 45; CHECK-64: jmp qword ptr [rip + fn_ref] 46; CHECK-32: call dword ptr [fn_ref] 47; CHECK-32: jmp dword ptr [fn_ref] 48 49t1: 50call [fn_ref] 51jmp [fn_ref] 52; CHECK-LABEL: t1: 53; CHECK-64: call qword ptr [rip + fn_ref] 54; CHECK-64: jmp qword ptr [rip + fn_ref] 55; CHECK-32: call dword ptr [fn_ref] 56; CHECK-32: jmp dword ptr [fn_ref] 57 58ifdef rax 59 t2: 60 call qword ptr [fn_ref] 61 jmp qword ptr [fn_ref] 62 ; CHECK-64-LABEL: t2: 63 ; CHECK-64: call qword ptr [rip + fn_ref] 64 ; CHECK-64: jmp qword ptr [rip + fn_ref] 65else 66 t2: 67 call dword ptr [fn_ref] 68 jmp dword ptr [fn_ref] 69 ; CHECK-32-LABEL: t2: 70 ; CHECK-32: call dword ptr [fn_ref] 71 ; CHECK-32: jmp dword ptr [fn_ref] 72 73 t3: 74 call fn_ref_word 75 jmp fn_ref_word 76 ; CHECK-32-LABEL: t3: 77 ; CHECK-32: call word ptr [fn_ref_word] 78 ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] 79 80 t4: 81 call [fn_ref_word] 82 jmp [fn_ref_word] 83 ; CHECK-32-LABEL: t4: 84 ; CHECK-32: call word ptr [fn_ref_word] 85 ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] 86 87 t5: 88 call word ptr [fn_ref_word] 89 jmp word ptr [fn_ref_word] 90 ; CHECK-32-LABEL: t5: 91 ; CHECK-32: call word ptr [fn_ref_word] 92 ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] 93endif 94 95t6: 96call t6 97jmp t6 98; CHECK-LABEL: t6: 99; CHECK: call t6 100; CHECK-NEXT: jmp t6 101 102t7: 103call [t7] 104jmp [t7] 105; CHECK-LABEL: t7: 106; CHECK: call t7 107; CHECK-NEXT: jmp t7 108 109ifdef rax 110 t8: 111 call qword ptr [t8] 112 jmp qword ptr [t8] 113 ; CHECK-64-LABEL: t8: 114 ; CHECK-64: call qword ptr [rip + t8] 115 ; CHECK-64-NEXT: jmp qword ptr [rip + t8] 116else 117 t8: 118 call dword ptr [t8] 119 jmp dword ptr [t8] 120 ; CHECK-32-LABEL: t8: 121 ; CHECK-32: call dword ptr [t8] 122 ; CHECK-32-NEXT: jmp dword ptr [t8] 123endif 124 125t9: 126call fn 127jmp fn 128; CHECK-LABEL: t9: 129; CHECK: call fn 130; CHECK-NEXT: jmp fn 131 132t10: 133call [fn] 134jmp [fn] 135; CHECK-LABEL: t10: 136; CHECK: call fn 137; CHECK-NEXT: jmp fn 138 139ifdef rax 140 t11: 141 call qword ptr [fn] 142 jmp qword ptr [fn] 143 ; CHECK-64-LABEL: t11: 144 ; CHECK-64: call qword ptr [rip + fn] 145 ; CHECK-64-NEXT: jmp qword ptr [rip + fn] 146else 147 t11: 148 call dword ptr [fn] 149 jmp dword ptr [fn] 150 ; CHECK-32-LABEL: t11: 151 ; CHECK-32: call dword ptr [fn] 152 ; CHECK-32-NEXT: jmp dword ptr [fn] 153endif 154 155t12: 156call fn_ref_struc 157jmp fn_ref_struc 158; CHECK-LABEL: t12: 159; CHECK-64: call qword ptr [rip + fn_ref_struc] 160; CHECK-64: jmp qword ptr [rip + fn_ref_struc] 161; CHECK-32: call dword ptr [fn_ref_struc] 162; CHECK-32: jmp dword ptr [fn_ref_struc] 163 164t13: 165call [fn_ref_struc] 166jmp [fn_ref_struc] 167; CHECK-LABEL: t13: 168; CHECK-64: call qword ptr [rip + fn_ref_struc] 169; CHECK-64: jmp qword ptr [rip + fn_ref_struc] 170; CHECK-32: call dword ptr [fn_ref_struc] 171; CHECK-32: jmp dword ptr [fn_ref_struc] 172 173ifdef rax 174 t14: 175 call qword ptr [fn_ref_struc] 176 jmp qword ptr [fn_ref_struc] 177 ; CHECK-64-LABEL: t14: 178 ; CHECK-64: call qword ptr [rip + fn_ref_struc] 179 ; CHECK-64: jmp qword ptr [rip + fn_ref_struc] 180else 181 t14: 182 call dword ptr [fn_ref_struc] 183 jmp dword ptr [fn_ref_struc] 184 ; CHECK-32-LABEL: t14: 185 ; CHECK-32: call dword ptr [fn_ref_struc] 186 ; CHECK-32: jmp dword ptr [fn_ref_struc] 187endif 188 189t15: 190je t15 191; CHECK-LABEL: t15: 192; CHECK: je t15 193 194t16: 195je [t16]; 196; CHECK-LABEL: t16: 197; CHECK: je t16 198 199t17: 200call fn_ref_extern 201jmp fn_ref_extern 202; CHECK-LABEL: t17: 203; CHECK-64: call qword ptr [rip + fn_ref_extern] 204; CHECK-64: jmp qword ptr [rip + fn_ref_extern] 205; CHECK-32: call dword ptr [fn_ref_extern] 206; CHECK-32: jmp dword ptr [fn_ref_extern] 207 208t18: 209call [fn_ref_extern] 210jmp [fn_ref_extern] 211; CHECK-LABEL: t18: 212; CHECK-64: call qword ptr [rip + fn_ref_extern] 213; CHECK-64: jmp qword ptr [rip + fn_ref_extern] 214; CHECK-32: call dword ptr [fn_ref_extern] 215; CHECK-32: jmp dword ptr [fn_ref_extern] 216 217ifdef rax 218 t19: 219 call qword ptr [fn_ref_extern] 220 jmp qword ptr [fn_ref_extern] 221 ; CHECK-64-LABEL: t19: 222 ; CHECK-64: call qword ptr [rip + fn_ref_extern] 223 ; CHECK-64: jmp qword ptr [rip + fn_ref_extern] 224else 225 t19: 226 call dword ptr [fn_ref_extern] 227 jmp dword ptr [fn_ref_extern] 228 ; CHECK-32-LABEL: t19: 229 ; CHECK-32: call dword ptr [fn_ref_extern] 230 ; CHECK-32: jmp dword ptr [fn_ref_extern] 231 232 t20: 233 call fn_ref_extern_word 234 jmp fn_ref_extern_word 235 ; CHECK-32-LABEL: t20: 236 ; CHECK-32: call word ptr [fn_ref_extern_word] 237 ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] 238 239 t21: 240 call [fn_ref_extern_word] 241 jmp [fn_ref_extern_word] 242 ; CHECK-32-LABEL: t21: 243 ; CHECK-32: call word ptr [fn_ref_extern_word] 244 ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] 245 246 t22: 247 call word ptr [fn_ref_extern_word] 248 jmp word ptr [fn_ref_extern_word] 249 ; CHECK-32-LABEL: t22: 250 ; CHECK-32: call word ptr [fn_ref_extern_word] 251 ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] 252endif 253 254t23: 255call fn_proc_extern 256jmp fn_proc_extern 257; CHECK-LABEL: t23: 258; CHECK: call fn_proc_extern 259 260t24: 261call [fn_proc_extern] 262jmp [fn_proc_extern] 263; CHECK-LABEL: t24: 264; CHECK: call fn_proc_extern 265 266t25: 267; CHECK-LABEL: t25: 268ifdef rax 269 call qword ptr [fn_ref_extern] 270 jmp qword ptr [fn_ref_extern] 271 ; CHECK-64: call qword ptr [rip + fn_ref_extern] 272 ; CHECK-64: jmp qword ptr [rip + fn_ref_extern] 273else 274 call dword ptr [fn_ref_extern] 275 jmp dword ptr [fn_ref_extern] 276 ; CHECK-32: call dword ptr [fn_ref_extern] 277 ; CHECK-32: jmp dword ptr [fn_ref_extern] 278endif 279 280end 281