13333c28fSAlan Zhao; RUN: llvm-ml -m64 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-64,CHECK 23333c28fSAlan Zhao; RUN: llvm-ml -m32 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-32,CHECK 33333c28fSAlan Zhao 482c5e302SAlan Zhaoifdef rax 582c5e302SAlan Zhao extern fn_ref_extern : qword 682c5e302SAlan Zhaoelse 782c5e302SAlan Zhao extern fn_ref_extern : dword 882c5e302SAlan Zhaoendif 9*8a1b5f26SAlan Zhao 10*8a1b5f26SAlan Zhaoextern fn_proc_extern : proc 1182c5e302SAlan Zhaoextern fn_ref_extern_word : word 1282c5e302SAlan Zhao 133333c28fSAlan Zhao.data 143333c28fSAlan Zhao 153333c28fSAlan Zhaoifdef rax 163333c28fSAlan Zhao fn_ref qword 1 173333c28fSAlan Zhaoelse 183333c28fSAlan Zhao fn_ref dword 1 193333c28fSAlan Zhaoendif 203333c28fSAlan Zhao 213333c28fSAlan Zhaofn_ref_word word 2 223333c28fSAlan Zhaofn PROC 233333c28fSAlan Zhao 243333c28fSAlan ZhaoBranchTargetStruc struc 253333c28fSAlan Zhao member0 dword ? 263333c28fSAlan Zhao ifdef rax 273333c28fSAlan Zhao member1 dword ? 283333c28fSAlan Zhao endif 293333c28fSAlan ZhaoBranchTargetStruc ends 303333c28fSAlan Zhao 313333c28fSAlan Zhao 323333c28fSAlan Zhaoifdef rax 333333c28fSAlan Zhao fn_ref_struc BranchTargetStruc {3, 3} 343333c28fSAlan Zhaoelse 353333c28fSAlan Zhao fn_ref_struc BranchTargetStruc {3} 363333c28fSAlan Zhaoendif 373333c28fSAlan Zhao 383333c28fSAlan Zhao.code 393333c28fSAlan Zhao 403333c28fSAlan Zhaot0: 413333c28fSAlan Zhaocall fn_ref 423333c28fSAlan Zhaojmp fn_ref 433333c28fSAlan Zhao; CHECK-LABEL: t0: 443333c28fSAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref] 453333c28fSAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref] 463333c28fSAlan Zhao; CHECK-32: call dword ptr [fn_ref] 473333c28fSAlan Zhao; CHECK-32: jmp dword ptr [fn_ref] 483333c28fSAlan Zhao 493333c28fSAlan Zhaot1: 503333c28fSAlan Zhaocall [fn_ref] 513333c28fSAlan Zhaojmp [fn_ref] 523333c28fSAlan Zhao; CHECK-LABEL: t1: 533333c28fSAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref] 543333c28fSAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref] 553333c28fSAlan Zhao; CHECK-32: call dword ptr [fn_ref] 563333c28fSAlan Zhao; CHECK-32: jmp dword ptr [fn_ref] 573333c28fSAlan Zhao 583333c28fSAlan Zhaoifdef rax 593333c28fSAlan Zhao t2: 603333c28fSAlan Zhao call qword ptr [fn_ref] 613333c28fSAlan Zhao jmp qword ptr [fn_ref] 623333c28fSAlan Zhao ; CHECK-64-LABEL: t2: 633333c28fSAlan Zhao ; CHECK-64: call qword ptr [rip + fn_ref] 643333c28fSAlan Zhao ; CHECK-64: jmp qword ptr [rip + fn_ref] 653333c28fSAlan Zhaoelse 663333c28fSAlan Zhao t2: 673333c28fSAlan Zhao call dword ptr [fn_ref] 683333c28fSAlan Zhao jmp dword ptr [fn_ref] 693333c28fSAlan Zhao ; CHECK-32-LABEL: t2: 703333c28fSAlan Zhao ; CHECK-32: call dword ptr [fn_ref] 713333c28fSAlan Zhao ; CHECK-32: jmp dword ptr [fn_ref] 723333c28fSAlan Zhao 733333c28fSAlan Zhao t3: 743333c28fSAlan Zhao call fn_ref_word 753333c28fSAlan Zhao jmp fn_ref_word 763333c28fSAlan Zhao ; CHECK-32-LABEL: t3: 773333c28fSAlan Zhao ; CHECK-32: call word ptr [fn_ref_word] 783333c28fSAlan Zhao ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] 793333c28fSAlan Zhao 803333c28fSAlan Zhao t4: 813333c28fSAlan Zhao call [fn_ref_word] 823333c28fSAlan Zhao jmp [fn_ref_word] 833333c28fSAlan Zhao ; CHECK-32-LABEL: t4: 843333c28fSAlan Zhao ; CHECK-32: call word ptr [fn_ref_word] 853333c28fSAlan Zhao ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] 863333c28fSAlan Zhao 873333c28fSAlan Zhao t5: 883333c28fSAlan Zhao call word ptr [fn_ref_word] 893333c28fSAlan Zhao jmp word ptr [fn_ref_word] 903333c28fSAlan Zhao ; CHECK-32-LABEL: t5: 913333c28fSAlan Zhao ; CHECK-32: call word ptr [fn_ref_word] 923333c28fSAlan Zhao ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] 933333c28fSAlan Zhaoendif 943333c28fSAlan Zhao 953333c28fSAlan Zhaot6: 963333c28fSAlan Zhaocall t6 973333c28fSAlan Zhaojmp t6 983333c28fSAlan Zhao; CHECK-LABEL: t6: 993333c28fSAlan Zhao; CHECK: call t6 1003333c28fSAlan Zhao; CHECK-NEXT: jmp t6 1013333c28fSAlan Zhao 1023333c28fSAlan Zhaot7: 1033333c28fSAlan Zhaocall [t7] 1043333c28fSAlan Zhaojmp [t7] 1053333c28fSAlan Zhao; CHECK-LABEL: t7: 1063333c28fSAlan Zhao; CHECK: call t7 1073333c28fSAlan Zhao; CHECK-NEXT: jmp t7 1083333c28fSAlan Zhao 1093333c28fSAlan Zhaoifdef rax 1103333c28fSAlan Zhao t8: 1113333c28fSAlan Zhao call qword ptr [t8] 1123333c28fSAlan Zhao jmp qword ptr [t8] 1133333c28fSAlan Zhao ; CHECK-64-LABEL: t8: 1143333c28fSAlan Zhao ; CHECK-64: call qword ptr [rip + t8] 1153333c28fSAlan Zhao ; CHECK-64-NEXT: jmp qword ptr [rip + t8] 1163333c28fSAlan Zhaoelse 1173333c28fSAlan Zhao t8: 1183333c28fSAlan Zhao call dword ptr [t8] 1193333c28fSAlan Zhao jmp dword ptr [t8] 1203333c28fSAlan Zhao ; CHECK-32-LABEL: t8: 1213333c28fSAlan Zhao ; CHECK-32: call dword ptr [t8] 1223333c28fSAlan Zhao ; CHECK-32-NEXT: jmp dword ptr [t8] 1233333c28fSAlan Zhaoendif 1243333c28fSAlan Zhao 1253333c28fSAlan Zhaot9: 1263333c28fSAlan Zhaocall fn 1273333c28fSAlan Zhaojmp fn 1283333c28fSAlan Zhao; CHECK-LABEL: t9: 1293333c28fSAlan Zhao; CHECK: call fn 1303333c28fSAlan Zhao; CHECK-NEXT: jmp fn 1313333c28fSAlan Zhao 1323333c28fSAlan Zhaot10: 1333333c28fSAlan Zhaocall [fn] 1343333c28fSAlan Zhaojmp [fn] 1353333c28fSAlan Zhao; CHECK-LABEL: t10: 1363333c28fSAlan Zhao; CHECK: call fn 1373333c28fSAlan Zhao; CHECK-NEXT: jmp fn 1383333c28fSAlan Zhao 1393333c28fSAlan Zhaoifdef rax 1403333c28fSAlan Zhao t11: 1413333c28fSAlan Zhao call qword ptr [fn] 1423333c28fSAlan Zhao jmp qword ptr [fn] 1433333c28fSAlan Zhao ; CHECK-64-LABEL: t11: 1443333c28fSAlan Zhao ; CHECK-64: call qword ptr [rip + fn] 1453333c28fSAlan Zhao ; CHECK-64-NEXT: jmp qword ptr [rip + fn] 1463333c28fSAlan Zhaoelse 1473333c28fSAlan Zhao t11: 1483333c28fSAlan Zhao call dword ptr [fn] 1493333c28fSAlan Zhao jmp dword ptr [fn] 1503333c28fSAlan Zhao ; CHECK-32-LABEL: t11: 1513333c28fSAlan Zhao ; CHECK-32: call dword ptr [fn] 1523333c28fSAlan Zhao ; CHECK-32-NEXT: jmp dword ptr [fn] 1533333c28fSAlan Zhaoendif 1543333c28fSAlan Zhao 1553333c28fSAlan Zhaot12: 1563333c28fSAlan Zhaocall fn_ref_struc 1573333c28fSAlan Zhaojmp fn_ref_struc 1583333c28fSAlan Zhao; CHECK-LABEL: t12: 1593333c28fSAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref_struc] 1603333c28fSAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref_struc] 1613333c28fSAlan Zhao; CHECK-32: call dword ptr [fn_ref_struc] 1623333c28fSAlan Zhao; CHECK-32: jmp dword ptr [fn_ref_struc] 1633333c28fSAlan Zhao 1643333c28fSAlan Zhaot13: 1653333c28fSAlan Zhaocall [fn_ref_struc] 1663333c28fSAlan Zhaojmp [fn_ref_struc] 1673333c28fSAlan Zhao; CHECK-LABEL: t13: 1683333c28fSAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref_struc] 1693333c28fSAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref_struc] 1703333c28fSAlan Zhao; CHECK-32: call dword ptr [fn_ref_struc] 1713333c28fSAlan Zhao; CHECK-32: jmp dword ptr [fn_ref_struc] 1723333c28fSAlan Zhao 1733333c28fSAlan Zhaoifdef rax 1743333c28fSAlan Zhao t14: 1753333c28fSAlan Zhao call qword ptr [fn_ref_struc] 1763333c28fSAlan Zhao jmp qword ptr [fn_ref_struc] 1773333c28fSAlan Zhao ; CHECK-64-LABEL: t14: 1783333c28fSAlan Zhao ; CHECK-64: call qword ptr [rip + fn_ref_struc] 1793333c28fSAlan Zhao ; CHECK-64: jmp qword ptr [rip + fn_ref_struc] 1803333c28fSAlan Zhaoelse 1813333c28fSAlan Zhao t14: 1823333c28fSAlan Zhao call dword ptr [fn_ref_struc] 1833333c28fSAlan Zhao jmp dword ptr [fn_ref_struc] 1843333c28fSAlan Zhao ; CHECK-32-LABEL: t14: 1853333c28fSAlan Zhao ; CHECK-32: call dword ptr [fn_ref_struc] 1863333c28fSAlan Zhao ; CHECK-32: jmp dword ptr [fn_ref_struc] 1873333c28fSAlan Zhaoendif 1883333c28fSAlan Zhao 1893333c28fSAlan Zhaot15: 1903333c28fSAlan Zhaoje t15 1913333c28fSAlan Zhao; CHECK-LABEL: t15: 1923333c28fSAlan Zhao; CHECK: je t15 1933333c28fSAlan Zhao 1943333c28fSAlan Zhaot16: 1953333c28fSAlan Zhaoje [t16]; 1963333c28fSAlan Zhao; CHECK-LABEL: t16: 1973333c28fSAlan Zhao; CHECK: je t16 19882c5e302SAlan Zhao 19982c5e302SAlan Zhaot17: 20082c5e302SAlan Zhaocall fn_ref_extern 20182c5e302SAlan Zhaojmp fn_ref_extern 20282c5e302SAlan Zhao; CHECK-LABEL: t17: 20382c5e302SAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref_extern] 20482c5e302SAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref_extern] 20582c5e302SAlan Zhao; CHECK-32: call dword ptr [fn_ref_extern] 20682c5e302SAlan Zhao; CHECK-32: jmp dword ptr [fn_ref_extern] 20782c5e302SAlan Zhao 20882c5e302SAlan Zhaot18: 20982c5e302SAlan Zhaocall [fn_ref_extern] 21082c5e302SAlan Zhaojmp [fn_ref_extern] 21182c5e302SAlan Zhao; CHECK-LABEL: t18: 21282c5e302SAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref_extern] 21382c5e302SAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref_extern] 21482c5e302SAlan Zhao; CHECK-32: call dword ptr [fn_ref_extern] 21582c5e302SAlan Zhao; CHECK-32: jmp dword ptr [fn_ref_extern] 21682c5e302SAlan Zhao 21782c5e302SAlan Zhaoifdef rax 21882c5e302SAlan Zhao t19: 21982c5e302SAlan Zhao call qword ptr [fn_ref_extern] 22082c5e302SAlan Zhao jmp qword ptr [fn_ref_extern] 22182c5e302SAlan Zhao ; CHECK-64-LABEL: t19: 22282c5e302SAlan Zhao ; CHECK-64: call qword ptr [rip + fn_ref_extern] 22382c5e302SAlan Zhao ; CHECK-64: jmp qword ptr [rip + fn_ref_extern] 22482c5e302SAlan Zhaoelse 22582c5e302SAlan Zhao t19: 22682c5e302SAlan Zhao call dword ptr [fn_ref_extern] 22782c5e302SAlan Zhao jmp dword ptr [fn_ref_extern] 22882c5e302SAlan Zhao ; CHECK-32-LABEL: t19: 22982c5e302SAlan Zhao ; CHECK-32: call dword ptr [fn_ref_extern] 23082c5e302SAlan Zhao ; CHECK-32: jmp dword ptr [fn_ref_extern] 23182c5e302SAlan Zhao 23282c5e302SAlan Zhao t20: 23382c5e302SAlan Zhao call fn_ref_extern_word 23482c5e302SAlan Zhao jmp fn_ref_extern_word 23582c5e302SAlan Zhao ; CHECK-32-LABEL: t20: 23682c5e302SAlan Zhao ; CHECK-32: call word ptr [fn_ref_extern_word] 23782c5e302SAlan Zhao ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] 23882c5e302SAlan Zhao 23982c5e302SAlan Zhao t21: 24082c5e302SAlan Zhao call [fn_ref_extern_word] 24182c5e302SAlan Zhao jmp [fn_ref_extern_word] 24282c5e302SAlan Zhao ; CHECK-32-LABEL: t21: 24382c5e302SAlan Zhao ; CHECK-32: call word ptr [fn_ref_extern_word] 24482c5e302SAlan Zhao ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] 24582c5e302SAlan Zhao 24682c5e302SAlan Zhao t22: 24782c5e302SAlan Zhao call word ptr [fn_ref_extern_word] 24882c5e302SAlan Zhao jmp word ptr [fn_ref_extern_word] 24982c5e302SAlan Zhao ; CHECK-32-LABEL: t22: 25082c5e302SAlan Zhao ; CHECK-32: call word ptr [fn_ref_extern_word] 25182c5e302SAlan Zhao ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] 25282c5e302SAlan Zhaoendif 253*8a1b5f26SAlan Zhao 254*8a1b5f26SAlan Zhaot23: 255*8a1b5f26SAlan Zhaocall fn_proc_extern 256*8a1b5f26SAlan Zhaojmp fn_proc_extern 257*8a1b5f26SAlan Zhao; CHECK-LABEL: t23: 258*8a1b5f26SAlan Zhao; CHECK: call fn_proc_extern 259*8a1b5f26SAlan Zhao 260*8a1b5f26SAlan Zhaot24: 261*8a1b5f26SAlan Zhaocall [fn_proc_extern] 262*8a1b5f26SAlan Zhaojmp [fn_proc_extern] 263*8a1b5f26SAlan Zhao; CHECK-LABEL: t24: 264*8a1b5f26SAlan Zhao; CHECK: call fn_proc_extern 265*8a1b5f26SAlan Zhao 266*8a1b5f26SAlan Zhaot25: 267*8a1b5f26SAlan Zhao; CHECK-LABEL: t25: 268*8a1b5f26SAlan Zhaoifdef rax 269*8a1b5f26SAlan Zhao call qword ptr [fn_ref_extern] 270*8a1b5f26SAlan Zhao jmp qword ptr [fn_ref_extern] 271*8a1b5f26SAlan Zhao ; CHECK-64: call qword ptr [rip + fn_ref_extern] 272*8a1b5f26SAlan Zhao ; CHECK-64: jmp qword ptr [rip + fn_ref_extern] 273*8a1b5f26SAlan Zhaoelse 274*8a1b5f26SAlan Zhao call dword ptr [fn_ref_extern] 275*8a1b5f26SAlan Zhao jmp dword ptr [fn_ref_extern] 276*8a1b5f26SAlan Zhao ; CHECK-32: call dword ptr [fn_ref_extern] 277*8a1b5f26SAlan Zhao ; CHECK-32: jmp dword ptr [fn_ref_extern] 278*8a1b5f26SAlan Zhaoendif 279*8a1b5f26SAlan Zhao 280*8a1b5f26SAlan Zhaoend 281