Keshav Kini found this example. 


/* The original code: */

unsigned factorial (unsigned n) {
    return n == 0 ? 1 : n * factorial(n - 1);
}

----------------------------------------------------------------------

# Compiled with gcc, Optimized with -Og

	.file	"fact4.c"
	.text
	.globl	factorial
	.type	factorial, @function
factorial:
.LFB0:
	.cfi_startproc
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movl	%edi, %ebx
	testl	%edi, %edi
	je	.L3
	leal	-1(%rdi), %edi
	call	factorial
	imull	%ebx, %eax
	jmp	.L2
.L3:
	movl	$1, %eax
.L2:
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE0:
	.size	factorial, .-factorial
	.ident	"GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4"
	.section	.note.GNU-stack,"",@progbits

----------------------------------------------------------------------

# Compiled with clang, optimized with -O1:

	.text
	.file	"/tmp/baz.c"
	.globl	factorial
	.align	16, 0x90
	.type	factorial,@function
factorial:                              # @factorial
	.cfi_startproc
# BB#0:
	movl	$1, %eax
	testl	%edi, %edi
	je	.LBB0_2
	.align	16, 0x90
.LBB0_1:                                # %tailrecurse
                                        # =>This Inner Loop Header: Depth=1
	imull	%edi, %eax
	decl	%edi
	jne	.LBB0_1
.LBB0_2:                                # %tailrecurse._crit_edge
	retq
.Ltmp0:
	.size	factorial, .Ltmp0-factorial
	.cfi_endproc


	.ident	"Debian clang version 3.5.2-2 (tags/RELEASE_352/final) (based on LLVM 3.5.2)"
	.section	".note.GNU-stack","",@progbits


----------------------------------------------------------------------

# Compiled with clang, optimized with -O2:

# "vectorized monstrosity using an 8-fold unrolled loop and a slew of SSE
# instructions and XMM registers "
# optimized assembly (as produced by Clang/LLVM 3.5.2).

	.text
	.file	"/tmp/baz.c"
	.section	.rodata.cst16,"aM",@progbits,16
	.align	16
.LCPI0_0:
	.long	1                       # 0x1
	.long	1                       # 0x1
	.long	1                       # 0x1
	.long	1                       # 0x1
.LCPI0_1:
	.long	0                       # 0x0
	.long	4294967295              # 0xffffffff
	.long	4294967294              # 0xfffffffe
	.long	4294967293              # 0xfffffffd
.LCPI0_2:
	.long	4294967292              # 0xfffffffc
	.long	4294967291              # 0xfffffffb
	.long	4294967290              # 0xfffffffa
	.long	4294967289              # 0xfffffff9
	.text
	.globl	factorial
	.align	16, 0x90
	.type	factorial,@function
factorial:                              # @factorial
	.cfi_startproc
# BB#0:
	movl	$1, %eax
	testl	%edi, %edi
	je	.LBB0_26
# BB#1:                                 # %overflow.checked
	movl	%edi, %ecx
	andl	$-8, %ecx
	movl	%edi, %eax
	andl	$-8, %eax
	je	.LBB0_2
# BB#3:                                 # %vector.body.preheader
	movl	%edi, %r8d
	subl	%ecx, %r8d
	leal	-8(%rax), %edx
	shrl	$3, %edx
	incl	%edx
	je	.LBB0_6
# BB#4:                                 # %vector.body.preheader
	movl	%edx, %ecx
	andl	$1, %ecx
	jne	.LBB0_6
# BB#5:
	pxor	%xmm0, %xmm0
	xorl	%ecx, %ecx
	movdqa	.LCPI0_0(%rip), %xmm2
	pxor	%xmm1, %xmm1
	movdqa	%xmm2, %xmm3
	jmp	.LBB0_7
.LBB0_2:
	xorl	%eax, %eax
	movdqa	.LCPI0_0(%rip), %xmm1
	movl	%edi, %r8d
	movdqa	%xmm1, %xmm0
	jmp	.LBB0_11
.LBB0_6:                                # %vector.body.unr
	movd	%edi, %xmm0
	pshufd	$0, %xmm0, %xmm0        # xmm0 = xmm0[0,0,0,0]
	movdqa	.LCPI0_1(%rip), %xmm1
	paddd	%xmm0, %xmm1
	paddd	.LCPI0_2(%rip), %xmm0
	movl	$8, %ecx
	movdqa	%xmm1, %xmm2
	movdqa	%xmm0, %xmm3
.LBB0_7:                                # %vector.body.preheader.split
	cmpl	$2, %edx
	jb	.LBB0_11
# BB#8:                                 # %vector.body.preheader.split.split
	movl	%edi, %edx
	subl	%ecx, %edx
	movl	%eax, %esi
	subl	%ecx, %esi
	movdqa	.LCPI0_1(%rip), %xmm8
	movdqa	.LCPI0_2(%rip), %xmm1
	.align	16, 0x90
.LBB0_9:                                # %vector.body
                                        # =>This Inner Loop Header: Depth=1
	movd	%edx, %xmm4
	pshufd	$0, %xmm4, %xmm4        # xmm4 = xmm4[0,0,0,0]
	movdqa	%xmm4, %xmm5
	paddd	%xmm8, %xmm5
	paddd	%xmm1, %xmm4
	pshufd	$49, %xmm5, %xmm6       # xmm6 = xmm5[1,0,3,0]
	pmuludq	%xmm2, %xmm5
	pshufd	$49, %xmm2, %xmm2       # xmm2 = xmm2[1,0,3,0]
	pmuludq	%xmm6, %xmm2
	shufps	$-120, %xmm2, %xmm5     # xmm5 = xmm5[0,2],xmm2[0,2]
	pshufd	$-40, %xmm5, %xmm5      # xmm5 = xmm5[0,2,1,3]
	pshufd	$49, %xmm4, %xmm6       # xmm6 = xmm4[1,0,3,0]
	pmuludq	%xmm3, %xmm4
	pshufd	$49, %xmm3, %xmm3       # xmm3 = xmm3[1,0,3,0]
	pmuludq	%xmm6, %xmm3
	shufps	$-120, %xmm3, %xmm4     # xmm4 = xmm4[0,2],xmm3[0,2]
	pshufd	$-40, %xmm4, %xmm4      # xmm4 = xmm4[0,2,1,3]
	leal	-8(%rdx), %ecx
	movd	%ecx, %xmm6
	pshufd	$0, %xmm6, %xmm6        # xmm6 = xmm6[0,0,0,0]
	movdqa	%xmm6, %xmm7
	paddd	%xmm8, %xmm7
	paddd	%xmm1, %xmm6
	pshufd	$49, %xmm7, %xmm0       # xmm0 = xmm7[1,0,3,0]
	pmuludq	%xmm2, %xmm0
	pmuludq	%xmm5, %xmm7
	shufps	$-120, %xmm0, %xmm7     # xmm7 = xmm7[0,2],xmm0[0,2]
	pshufd	$-40, %xmm7, %xmm2      # xmm2 = xmm7[0,2,1,3]
	pshufd	$49, %xmm6, %xmm0       # xmm0 = xmm6[1,0,3,0]
	pmuludq	%xmm3, %xmm0
	pmuludq	%xmm4, %xmm6
	shufps	$-120, %xmm0, %xmm6     # xmm6 = xmm6[0,2],xmm0[0,2]
	pshufd	$-40, %xmm6, %xmm3      # xmm3 = xmm6[0,2,1,3]
	addl	$-16, %edx
	addl	$-16, %esi
	jne	.LBB0_9
# BB#10:
	movdqa	%xmm2, %xmm1
	movdqa	%xmm3, %xmm0
.LBB0_11:                               # %middle.block
	pshufd	$49, %xmm0, %xmm2       # xmm2 = xmm0[1,0,3,0]
	pmuludq	%xmm1, %xmm0
	pshufd	$49, %xmm1, %xmm1       # xmm1 = xmm1[1,0,3,0]
	pmuludq	%xmm2, %xmm1
	shufps	$-120, %xmm1, %xmm0     # xmm0 = xmm0[0,2],xmm1[0,2]
	pshufd	$-40, %xmm0, %xmm0      # xmm0 = xmm0[0,2,1,3]
	movdqa	%xmm0, %xmm2
	movhlps	%xmm2, %xmm2            # xmm2 = xmm2[1,1]
	pmuludq	%xmm0, %xmm2
	movaps	%xmm1, %xmm0
	movhlps	%xmm0, %xmm0            # xmm0 = xmm0[1,1]
	pmuludq	%xmm1, %xmm0
	shufps	$-120, %xmm0, %xmm2     # xmm2 = xmm2[0,2],xmm0[0,2]
	pshufd	$-40, %xmm2, %xmm1      # xmm1 = xmm2[0,2,1,3]
	pmuludq	%xmm0, %xmm1
	shufps	$-120, %xmm1, %xmm1     # xmm1 = xmm1[0,2,0,2]
	pshufd	$-40, %xmm1, %xmm0      # xmm0 = xmm1[0,2,1,3]
	movd	%xmm0, %edx
	cmpl	%edi, %eax
	jne	.LBB0_13
# BB#12:
	movl	%edx, %eax
                                        # kill: EAX<def> EAX<kill> RAX<kill>
	retq
.LBB0_13:                               # %tailrecurse.preheader
	movl	%r8d, %ecx
	andl	$3, %ecx
	testl	%r8d, %r8d
	je	.LBB0_16
# BB#14:                                # %tailrecurse.preheader
	xorl	%eax, %eax
	testl	%ecx, %ecx
	jne	.LBB0_16
# BB#15:
	movl	%r8d, %esi
	jmp	.LBB0_23
.LBB0_16:                               # %unr.cmp15
	cmpl	$1, %ecx
	jne	.LBB0_18
# BB#17:
	movl	%r8d, %eax
	jmp	.LBB0_22
.LBB0_18:                               # %unr.cmp
	cmpl	$2, %ecx
	jne	.LBB0_20
# BB#19:
	movl	%r8d, %ecx
	jmp	.LBB0_21
.LBB0_20:                               # %tailrecurse.unr
	leal	-1(%r8), %ecx
	imull	%r8d, %edx
.LBB0_21:                               # %tailrecurse.unr11
	leal	-1(%rcx), %eax
	imull	%edx, %ecx
	movl	%ecx, %edx
.LBB0_22:                               # %tailrecurse.unr12
	leal	-1(%rax), %esi
	imull	%edx, %eax
	movl	%eax, %edx
.LBB0_23:                               # %tailrecurse.preheader.split
	cmpl	$4, %r8d
	jb	.LBB0_26
# BB#24:
	movl	%edx, %eax
	.align	16, 0x90
.LBB0_25:                               # %tailrecurse
                                        # =>This Inner Loop Header: Depth=1
	leal	-1(%rsi), %ecx
	imull	%esi, %eax
	imull	%ecx, %eax
	leal	-2(%rsi), %ecx
	imull	%eax, %ecx
	leal	-3(%rsi), %eax
	imull	%ecx, %eax
	addl	$-4, %esi
	jne	.LBB0_25
.LBB0_26:                               # %tailrecurse._crit_edge
                                        # kill: EAX<def> EAX<kill> RAX<kill>
	retq
.Ltmp0:
	.size	factorial, .Ltmp0-factorial
	.cfi_endproc


	.ident	"Debian clang version 3.5.2-2 (tags/RELEASE_352/final) (based on LLVM 3.5.2)"
	.section	".note.GNU-stack","",@progbits