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