1*9880d681SAndroid Build Coastguard Worker; RUN: opt -reassociate -S < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdeclare void @use(float) 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine void @test1(float %x, float %y) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1 7*9880d681SAndroid Build Coastguard Worker; CHECK: fmul fast float %y, %x 8*9880d681SAndroid Build Coastguard Worker; CHECK: fmul fast float %y, %x 9*9880d681SAndroid Build Coastguard Worker; CHECK: fsub fast float %1, %2 10*9880d681SAndroid Build Coastguard Worker; CHECK: call void @use(float %{{.*}}) 11*9880d681SAndroid Build Coastguard Worker; CHECK: call void @use(float %{{.*}}) 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker %1 = fmul fast float %x, %y 14*9880d681SAndroid Build Coastguard Worker %2 = fmul fast float %y, %x 15*9880d681SAndroid Build Coastguard Worker %3 = fsub fast float %1, %2 16*9880d681SAndroid Build Coastguard Worker call void @use(float %1) 17*9880d681SAndroid Build Coastguard Worker call void @use(float %3) 18*9880d681SAndroid Build Coastguard Worker ret void 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine float @test2(float %x, float %y) { 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul fast float %y, %x 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul fast float %y, %x 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fsub fast float %1, %2 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float %3 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker %1 = fmul fast float %x, %y 29*9880d681SAndroid Build Coastguard Worker %2 = fmul fast float %y, %x 30*9880d681SAndroid Build Coastguard Worker %3 = fsub fast float %1, %2 31*9880d681SAndroid Build Coastguard Worker ret float %3 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine float @test3(float %x, float %y) { 35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %factor = fmul fast float %x, 2.000000e+00 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %tmp1 = fmul fast float %factor, %y 38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float %tmp1 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker %1 = fmul fast float %x, %y 41*9880d681SAndroid Build Coastguard Worker %2 = fmul fast float %y, %x 42*9880d681SAndroid Build Coastguard Worker %3 = fadd fast float %1, %2 43*9880d681SAndroid Build Coastguard Worker ret float %3 44*9880d681SAndroid Build Coastguard Worker} 45