• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -march=x86 -mattr=sse4.1 | FileCheck %s
2; <rdar://problem/7859988>
3
4; Make sure we don't generate more jumps than we need to. We used to generate
5; something like this:
6;
7;       jne  LBB0_1
8;       jnp  LBB0_2
9;   LBB0_1:
10;       jmp  LBB0_3
11;   LBB0_2:
12;       addsd ...
13;   LBB0_3:
14;
15; Now we generate this:
16;
17;       jne  LBB0_2
18;       jp   LBB0_2
19;       addsd ...
20;   LBB0_2:
21
22; CHECK:       func
23; CHECK:       jne [[LABEL:.*]]
24; CHECK-NEXT:  jp  [[LABEL]]
25; CHECK-NOT:   jmp
26
27define float @func(float %x, float %y) nounwind readnone optsize ssp {
28entry:
29  %0 = fpext float %x to double
30  %1 = fpext float %y to double
31  %2 = fmul double %0, %1
32  %3 = fcmp une double %2, 0.000000e+00
33  br i1 %3, label %bb2, label %bb1
34
35bb1:
36  %4 = fadd double %2, -1.000000e+00
37  br label %bb2
38
39bb2:
40  %.0.in = phi double [ %4, %bb1 ], [ %2, %entry ]
41  %.0 = fptrunc double %.0.in to float
42  ret float %.0
43}
44