1; RUN: llc < %s -stop-after=finalize-isel -mtriple=x86_64-unknown-linux - | FileCheck %s --implicit-check-not FAKE_USE 2; Fake uses following tail calls should be pulled in front 3; of the TCRETURN instruction. Fake uses using something defined by 4; the tail call or after it should be suppressed. 5 6; CHECK: name:{{ +}}bar 7; CHECK: body: 8; CHECK: bb.0.{{.*}}: 9; CHECK: %0:{{.*}}= COPY 10; CHECK: FAKE_USE %0 11; CHECK: TCRETURN 12 13; CHECK: name:{{ +}}baz 14; CHECK: body: 15; CHECK: bb.0.{{.*}}: 16; CHECK: %0:{{.*}}= COPY 17; CHECK: FAKE_USE %0 18; CHECK: TCRETURN 19 20define void @bar(i32 %v) optdebug { 21entry: 22 %call = tail call i32 @_Z3fooi(i32 %v) 23 %mul = mul nsw i32 %call, 3 24 notail call void (...) @llvm.fake.use(i32 %mul) 25 notail call void (...) @llvm.fake.use(i32 %call) 26 notail call void (...) @llvm.fake.use(i32 %v) 27 ret void 28} 29 30define i32 @baz(i32 %v) optdebug { 31entry: 32 %call = tail call i32 @_Z3fooi(i32 %v) 33 notail call void (...) @llvm.fake.use(i32 %v) 34 ret i32 %call 35} 36 37declare i32 @_Z3fooi(i32) local_unnamed_addr 38