From 5dfd52398f5c1b67024106febdc68e6b12f8ad37 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Wed, 8 Jan 2020 10:33:44 -0500 Subject: [PATCH] [InstCombine] Adding testcase for Z / (1.0 / Y) => (Y * Z); NFC The added testcase shows the current transformation for the operation Z / (1.0 / Y), which remains unchanged. This will be updated to align with the transformed code (Y * Z) with D72319. The existing transformation Z / (X / Y) => (Y * Z) / X is not handling this case as there are multiple uses for (1.0 / Y) in this testcase. Patch by: @raghesh (Raghesh Aloor) Differential Revision: https://reviews.llvm.org/D72388 --- llvm/test/Transforms/InstCombine/fdiv.ll | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/llvm/test/Transforms/InstCombine/fdiv.ll b/llvm/test/Transforms/InstCombine/fdiv.ll index 777bdca..8bfeb67f 100644 --- a/llvm/test/Transforms/InstCombine/fdiv.ll +++ b/llvm/test/Transforms/InstCombine/fdiv.ll @@ -187,6 +187,21 @@ define float @div_with_div_denominator_extra_use(float %x, float %y, float %z) { ret float %div2 } +; Z / (1.0 / Y) + +define float @div_with_div_denominator_with_one_as_numerator_extra_use(float %x, float %y, float %z) { +; CHECK-LABEL: @div_with_div_denominator_with_one_as_numerator_extra_use( +; CHECK-NEXT: [[DIV1:%.*]] = fdiv float 1.000000e+00, [[Y:%.*]] +; CHECK-NEXT: [[DIV2:%.*]] = fdiv fast float [[Z:%.*]], [[DIV1]] +; CHECK-NEXT: call void @use_f32(float [[DIV1]]) +; CHECK-NEXT: ret float [[DIV2]] +; + %div1 = fdiv float 1.0, %y + %div2 = fdiv fast float %z, %div1 + call void @use_f32(float %div1) + ret float %div2 +} + define float @fneg_fneg(float %x, float %y) { ; CHECK-LABEL: @fneg_fneg( ; CHECK-NEXT: [[DIV:%.*]] = fdiv float [[X:%.*]], [[Y:%.*]] -- 2.7.4