; RUN: llc < %s -stop-after=finalize-isel -mtriple=x86_64-unknown-linux - | FileCheck %s --implicit-check-not FAKE_USE ; Fake uses following tail calls should be pulled in front ; of the TCRETURN instruction. Fake uses using something defined by ; the tail call or after it should be suppressed. ; CHECK: name:{{ +}}bar ; CHECK: body: ; CHECK: bb.0.{{.*}}: ; CHECK: %0:{{.*}}= COPY ; CHECK: FAKE_USE %0 ; CHECK: TCRETURN ; CHECK: name:{{ +}}baz ; CHECK: body: ; CHECK: bb.0.{{.*}}: ; CHECK: %0:{{.*}}= COPY ; CHECK: FAKE_USE %0 ; CHECK: TCRETURN define void @bar(i32 %v) optdebug { entry: %call = tail call i32 @_Z3fooi(i32 %v) %mul = mul nsw i32 %call, 3 notail call void (...) @llvm.fake.use(i32 %mul) notail call void (...) @llvm.fake.use(i32 %call) notail call void (...) @llvm.fake.use(i32 %v) ret void } define i32 @baz(i32 %v) optdebug { entry: %call = tail call i32 @_Z3fooi(i32 %v) notail call void (...) @llvm.fake.use(i32 %v) ret i32 %call } declare i32 @_Z3fooi(i32) local_unnamed_addr