This is definitely possible, I'll give an example using LLVM's IR
input:
declare void @g()
define void @f() {
br i1 undef, label %if.end, label %if.else
if.else:
call void @g()
br label %if.end
if.end:
ret void
}
after optimizations: declare void @g()
define void @f() {
if.else:
tail call void @g()
ret void
}