281 lines · plain
1; RUN: llvm-ml64 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-64,CHECK2; RUN: llvm-ml -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-32,CHECK3 4ifdef rax5 extern fn_ref_extern : qword6else7 extern fn_ref_extern : dword8endif9 10extern fn_proc_extern : proc11extern fn_ref_extern_word : word12 13.data14 15ifdef rax16 fn_ref qword 117else18 fn_ref dword 119endif20 21fn_ref_word word 222fn PROC23 24BranchTargetStruc struc25 member0 dword ?26 ifdef rax27 member1 dword ?28 endif29BranchTargetStruc ends30 31 32ifdef rax33 fn_ref_struc BranchTargetStruc {3, 3}34else35 fn_ref_struc BranchTargetStruc {3}36endif37 38.code39 40t0:41call fn_ref42jmp fn_ref43; 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 rax59 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]65else66 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_word75 jmp fn_ref_word76 ; 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]93endif94 95t6:96call t697jmp t698; CHECK-LABEL: t6:99; CHECK: call t6100; CHECK-NEXT: jmp t6101 102t7:103call [t7]104jmp [t7]105; CHECK-LABEL: t7:106; CHECK: call t7107; CHECK-NEXT: jmp t7108 109ifdef rax110 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]116else117 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]123endif124 125t9:126call fn127jmp fn128; CHECK-LABEL: t9:129; CHECK: call fn130; CHECK-NEXT: jmp fn131 132t10:133call [fn]134jmp [fn]135; CHECK-LABEL: t10:136; CHECK: call fn137; CHECK-NEXT: jmp fn138 139ifdef rax140 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]146else147 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]153endif154 155t12:156call fn_ref_struc157jmp fn_ref_struc158; 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 rax174 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]180else181 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]187endif188 189t15:190je t15191; CHECK-LABEL: t15:192; CHECK: je t15193 194t16:195je [t16];196; CHECK-LABEL: t16:197; CHECK: je t16198 199t17:200call fn_ref_extern201jmp fn_ref_extern202; 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 rax218 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]224else225 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_word234 jmp fn_ref_extern_word235 ; 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]252endif253 254t23:255call fn_proc_extern256jmp fn_proc_extern257; CHECK-LABEL: t23:258; CHECK: call fn_proc_extern259 260t24:261call [fn_proc_extern]262jmp [fn_proc_extern]263; CHECK-LABEL: t24:264; CHECK: call fn_proc_extern265 266t25:267; CHECK-LABEL: t25:268ifdef rax269 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]273else274 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]278endif279 280end281