X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=test%2FCodeGen%2FX86%2Fstackmap-shadow-optimization.ll;h=a3725f2c5b72135b772f41e9de9c2c775be8a9ce;hp=f640b9e6f6c848c7c868901412be3fff4522d577;hb=68aeef61f4a1da7af53b6ddcdbb6eb75da7eb72d;hpb=cf84852133ec605252dd2f26aa2abcc976e4c215 diff --git a/test/CodeGen/X86/stackmap-shadow-optimization.ll b/test/CodeGen/X86/stackmap-shadow-optimization.ll index f640b9e6f6c..a3725f2c5b7 100644 --- a/test/CodeGen/X86/stackmap-shadow-optimization.ll +++ b/test/CodeGen/X86/stackmap-shadow-optimization.ll @@ -5,17 +5,22 @@ ; bar. However, the frame teardown and the return do not count towards the ; stackmap shadow as the call return counts as a branch target so must flush ; the shadow. +; Note that in order for a thread to not return in to the patched space +; the call must be at the end of the shadow, so the required nop must be +; before the call, not after. define void @shadow_optimization_test() { entry: ; CHECK-LABEL: shadow_optimization_test: ; CHECK: callq _bar +; CHECK: nop +; CHECK: callq _bar ; CHECK-NOT: nop ; CHECK: callq _bar -; CHECK: nop -; CHECK: retq +; CHECK-NOT: nop call void @bar() tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 0, i32 8) call void @bar() + call void @bar() ret void }