1 ; RUN: opt < %s -reassociate -instcombine -S | FileCheck %s 2 3 ; Not marked as fast, so must not change. 4 define float @test1(float %a0, float %a1, float %a2, float %a3, float %a4) { 5 ; CHECK-LABEL: test1 6 ; CHECK-NEXT: %tmp.2 = fadd float %a3, %a4 7 ; CHECK-NEXT: %tmp.4 = fadd float %tmp.2, %a2 8 ; CHECK-NEXT: %tmp.6 = fadd float %tmp.4, %a1 9 ; CHECK-NEXT: %tmp.8 = fadd float %tmp.6, %a0 10 ; CHECK-NEXT: %tmp.11 = fadd float %a2, %a3 11 ; CHECK-NEXT: %tmp.13 = fadd float %tmp.11, %a1 12 ; CHECK-NEXT: %tmp.15 = fadd float %tmp.13, %a0 13 ; CHECK-NEXT: %tmp.18 = fadd float %a1, %a2 14 ; CHECK-NEXT: %tmp.20 = fadd float %tmp.18, %a0 15 ; CHECK-NEXT: %tmp.23 = fadd float %a0, %a1 16 ; CHECK-NEXT: %tmp.26 = fsub float %tmp.8, %tmp.15 17 ; CHECK-NEXT: %tmp.28 = fadd float %tmp.20, %tmp.26 18 ; CHECK-NEXT: %tmp.30 = fsub float %tmp.28, %tmp.23 19 ; CHECK-NEXT: %tmp.32 = fsub float %tmp.30, %a4 20 ; CHECK-NEXT: %tmp.34 = fsub float %tmp.32, %a2 21 ; CHECK-NEXT: %T = fmul float %tmp.34, %tmp.34 22 ; CHECK-NEXT: ret float %T 23 24 %tmp.2 = fadd float %a4, %a3 25 %tmp.4 = fadd float %tmp.2, %a2 26 %tmp.6 = fadd float %tmp.4, %a1 27 %tmp.8 = fadd float %tmp.6, %a0 28 %tmp.11 = fadd float %a3, %a2 29 %tmp.13 = fadd float %tmp.11, %a1 30 %tmp.15 = fadd float %tmp.13, %a0 31 %tmp.18 = fadd float %a2, %a1 32 %tmp.20 = fadd float %tmp.18, %a0 33 %tmp.23 = fadd float %a1, %a0 34 %tmp.26 = fsub float %tmp.8, %tmp.15 35 %tmp.28 = fadd float %tmp.26, %tmp.20 36 %tmp.30 = fsub float %tmp.28, %tmp.23 37 %tmp.32 = fsub float %tmp.30, %a4 38 %tmp.34 = fsub float %tmp.32, %a2 39 %T = fmul float %tmp.34, %tmp.34 40 ret float %T 41 } 42 43 ; Should be able to eliminate everything. 44 define float @test2(float %a0, float %a1, float %a2, float %a3, float %a4) { 45 ; CHECK-LABEL: test2 46 ; CHECK: ret float 0.000000e+00 47 48 %tmp.2 = fadd fast float %a4, %a3 49 %tmp.4 = fadd fast float %tmp.2, %a2 50 %tmp.6 = fadd fast float %tmp.4, %a1 51 %tmp.8 = fadd fast float %tmp.6, %a0 52 %tmp.11 = fadd fast float %a3, %a2 53 %tmp.13 = fadd fast float %tmp.11, %a1 54 %tmp.15 = fadd fast float %tmp.13, %a0 55 %tmp.18 = fadd fast float %a2, %a1 56 %tmp.20 = fadd fast float %tmp.18, %a0 57 %tmp.23 = fadd fast float %a1, %a0 58 %tmp.26 = fsub fast float %tmp.8, %tmp.15 59 %tmp.28 = fadd fast float %tmp.26, %tmp.20 60 %tmp.30 = fsub fast float %tmp.28, %tmp.23 61 %tmp.32 = fsub fast float %tmp.30, %a4 62 %tmp.34 = fsub fast float %tmp.32, %a2 63 %T = fmul fast float %tmp.34, %tmp.34 64 ret float %T 65 } 66