1; RUN: opt < %s -reassociate -instcombine -S | FileCheck %s 2 3; Not marked as fast, so must not change. 4define 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. 44define 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