[llvm] 7ae436d - [InstSimplify] Update tests for max(min,max) to cover more types.

Serguei Katkov via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 18 22:22:01 PDT 2023


Author: Serguei Katkov
Date: 2023-04-19T12:05:29+07:00
New Revision: 7ae436d89154e9a69ae95602927474f5e6ac9809

URL: https://github.com/llvm/llvm-project/commit/7ae436d89154e9a69ae95602927474f5e6ac9809
DIFF: https://github.com/llvm/llvm-project/commit/7ae436d89154e9a69ae95602927474f5e6ac9809.diff

LOG: [InstSimplify] Update tests for max(min,max) to cover more types.

Added: 
    

Modified: 
    llvm/test/Transforms/InstSimplify/fminmax-folds.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstSimplify/fminmax-folds.ll b/llvm/test/Transforms/InstSimplify/fminmax-folds.ll
index 15381b7167af7..a5785275afff4 100644
--- a/llvm/test/Transforms/InstSimplify/fminmax-folds.ll
+++ b/llvm/test/Transforms/InstSimplify/fminmax-folds.ll
@@ -1,6 +1,9 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
 
+declare half @llvm.minimum.f16(half, half)
+declare half @llvm.maximum.f16(half, half)
+
 declare float @llvm.minnum.f32(float, float)
 declare float @llvm.maxnum.f32(float, float)
 declare float @llvm.minimum.f32(float, float)
@@ -1213,17 +1216,17 @@ define float @maximum_maximum_minimum(float %x, float %y) {
   ret float %val
 }
 
-define float @maximum_minimum_maximum(float %x, float %y) {
+define double @maximum_minimum_maximum(double %x, double %y) {
 ; CHECK-LABEL: @maximum_minimum_maximum(
-; CHECK-NEXT:    [[MAX:%.*]] = call float @llvm.maximum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MIN:%.*]] = call float @llvm.minimum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.maximum.f32(float [[MIN]], float [[MAX]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MAX:%.*]] = call double @llvm.maximum.f64(double [[X:%.*]], double [[Y:%.*]])
+; CHECK-NEXT:    [[MIN:%.*]] = call double @llvm.minimum.f64(double [[X]], double [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call double @llvm.maximum.f64(double [[MIN]], double [[MAX]])
+; CHECK-NEXT:    ret double [[VAL]]
 ;
-  %max = call float @llvm.maximum.f32(float %x, float %y)
-  %min = call float @llvm.minimum.f32(float %x, float %y)
-  %val = call float @llvm.maximum.f32(float %min, float %max)
-  ret float %val
+  %max = call double @llvm.maximum.f64(double %x, double %y)
+  %min = call double @llvm.minimum.f64(double %x, double %y)
+  %val = call double @llvm.maximum.f64(double %min, double %max)
+  ret double %val
 }
 
 define float @maximum_minimum_minimum(float %x, float %y) {
@@ -1239,43 +1242,43 @@ define float @maximum_minimum_minimum(float %x, float %y) {
   ret float %val
 }
 
-define float @maximum_maximum_maximum(float %x, float %y) {
+define half @maximum_maximum_maximum(half %x, half %y) {
 ; CHECK-LABEL: @maximum_maximum_maximum(
-; CHECK-NEXT:    [[MAX1:%.*]] = call float @llvm.maximum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MAX2:%.*]] = call float @llvm.maximum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.maximum.f32(float [[MAX1]], float [[MAX2]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MAX1:%.*]] = call half @llvm.maximum.f16(half [[X:%.*]], half [[Y:%.*]])
+; CHECK-NEXT:    [[MAX2:%.*]] = call half @llvm.maximum.f16(half [[X]], half [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call half @llvm.maximum.f16(half [[MAX1]], half [[MAX2]])
+; CHECK-NEXT:    ret half [[VAL]]
 ;
-  %max1 = call float @llvm.maximum.f32(float %x, float %y)
-  %max2 = call float @llvm.maximum.f32(float %x, float %y)
-  %val = call float @llvm.maximum.f32(float %max1, float %max2)
-  ret float %val
+  %max1 = call half @llvm.maximum.f16(half %x, half %y)
+  %max2 = call half @llvm.maximum.f16(half %x, half %y)
+  %val = call half @llvm.maximum.f16(half %max1, half %max2)
+  ret half %val
 }
 
-define float @minimum_maximum_minimum(float %x, float %y) {
+define <2 x float> @minimum_maximum_minimum(<2 x float> %x, <2 x float> %y) {
 ; CHECK-LABEL: @minimum_maximum_minimum(
-; CHECK-NEXT:    [[MAX:%.*]] = call float @llvm.maximum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MIN:%.*]] = call float @llvm.minimum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.minimum.f32(float [[MAX]], float [[MIN]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MAX:%.*]] = call <2 x float> @llvm.maximum.v2f32(<2 x float> [[X:%.*]], <2 x float> [[Y:%.*]])
+; CHECK-NEXT:    [[MIN:%.*]] = call <2 x float> @llvm.minimum.v2f32(<2 x float> [[X]], <2 x float> [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call <2 x float> @llvm.minimum.v2f32(<2 x float> [[MAX]], <2 x float> [[MIN]])
+; CHECK-NEXT:    ret <2 x float> [[VAL]]
 ;
-  %max = call float @llvm.maximum.f32(float %x, float %y)
-  %min = call float @llvm.minimum.f32(float %x, float %y)
-  %val = call float @llvm.minimum.f32(float %max, float %min)
-  ret float %val
+  %max = call <2 x float> @llvm.maximum.v2f32(<2 x float> %x, <2 x float> %y)
+  %min = call <2 x float> @llvm.minimum.v2f32(<2 x float> %x, <2 x float> %y)
+  %val = call <2 x float> @llvm.minimum.v2f32(<2 x float> %max, <2 x float> %min)
+  ret <2 x float> %val
 }
 
-define float @minimum_minimum_maximum(float %x, float %y) {
+define <2 x double> @minimum_minimum_maximum(<2 x double> %x, <2 x double> %y) {
 ; CHECK-LABEL: @minimum_minimum_maximum(
-; CHECK-NEXT:    [[MAX:%.*]] = call float @llvm.maximum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MIN:%.*]] = call float @llvm.minimum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.minimum.f32(float [[MIN]], float [[MAX]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MAX:%.*]] = call <2 x double> @llvm.maximum.v2f64(<2 x double> [[X:%.*]], <2 x double> [[Y:%.*]])
+; CHECK-NEXT:    [[MIN:%.*]] = call <2 x double> @llvm.minimum.v2f64(<2 x double> [[X]], <2 x double> [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call <2 x double> @llvm.minimum.v2f64(<2 x double> [[MIN]], <2 x double> [[MAX]])
+; CHECK-NEXT:    ret <2 x double> [[VAL]]
 ;
-  %max = call float @llvm.maximum.f32(float %x, float %y)
-  %min = call float @llvm.minimum.f32(float %x, float %y)
-  %val = call float @llvm.minimum.f32(float %min, float %max)
-  ret float %val
+  %max = call <2 x double> @llvm.maximum.v2f64(<2 x double> %x, <2 x double> %y)
+  %min = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> %y)
+  %val = call <2 x double> @llvm.minimum.v2f64(<2 x double> %min, <2 x double> %max)
+  ret <2 x double> %val
 }
 
 define float @minimum_maximum_maximum(float %x, float %y) {
@@ -1304,43 +1307,43 @@ define float @minimum_minimum_minimum(float %x, float %y) {
   ret float %val
 }
 
-define float @maxnum_maxnum_minnum(float %x, float %y) {
+define double @maxnum_maxnum_minnum(double %x, double %y) {
 ; CHECK-LABEL: @maxnum_maxnum_minnum(
-; CHECK-NEXT:    [[MAX:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MIN:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.maxnum.f32(float [[MAX]], float [[MIN]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MAX:%.*]] = call double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
+; CHECK-NEXT:    [[MIN:%.*]] = call double @llvm.minnum.f64(double [[X]], double [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call double @llvm.maxnum.f64(double [[MAX]], double [[MIN]])
+; CHECK-NEXT:    ret double [[VAL]]
 ;
-  %max = call float @llvm.maxnum.f32(float %x, float %y)
-  %min = call float @llvm.minnum.f32(float %x, float %y)
-  %val = call float @llvm.maxnum.f32(float %max, float %min)
-  ret float %val
+  %max = call double @llvm.maxnum.f64(double %x, double %y)
+  %min = call double @llvm.minnum.f64(double %x, double %y)
+  %val = call double @llvm.maxnum.f64(double %max, double %min)
+  ret double %val
 }
 
-define float @maxnum_minnum_maxnum(float %x, float %y) {
+define <2 x float> @maxnum_minnum_maxnum(<2 x float> %x, <2 x float> %y) {
 ; CHECK-LABEL: @maxnum_minnum_maxnum(
-; CHECK-NEXT:    [[MAX:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MIN:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.maxnum.f32(float [[MIN]], float [[MAX]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MAX:%.*]] = call <2 x float> @llvm.maxnum.v2f32(<2 x float> [[X:%.*]], <2 x float> [[Y:%.*]])
+; CHECK-NEXT:    [[MIN:%.*]] = call <2 x float> @llvm.minnum.v2f32(<2 x float> [[X]], <2 x float> [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call <2 x float> @llvm.maxnum.v2f32(<2 x float> [[MIN]], <2 x float> [[MAX]])
+; CHECK-NEXT:    ret <2 x float> [[VAL]]
 ;
-  %max = call float @llvm.maxnum.f32(float %x, float %y)
-  %min = call float @llvm.minnum.f32(float %x, float %y)
-  %val = call float @llvm.maxnum.f32(float %min, float %max)
-  ret float %val
+  %max = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %x, <2 x float> %y)
+  %min = call <2 x float> @llvm.minnum.v2f32(<2 x float> %x, <2 x float> %y)
+  %val = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %min, <2 x float> %max)
+  ret <2 x float> %val
 }
 
-define float @maxnum_minnum_minmum(float %x, float %y) {
+define <2 x double> @maxnum_minnum_minmum(<2 x double> %x, <2 x double> %y) {
 ; CHECK-LABEL: @maxnum_minnum_minmum(
-; CHECK-NEXT:    [[MIN1:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MIN2:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.maxnum.f32(float [[MIN1]], float [[MIN2]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MIN1:%.*]] = call <2 x double> @llvm.minnum.v2f64(<2 x double> [[X:%.*]], <2 x double> [[Y:%.*]])
+; CHECK-NEXT:    [[MIN2:%.*]] = call <2 x double> @llvm.minnum.v2f64(<2 x double> [[X]], <2 x double> [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call <2 x double> @llvm.maxnum.v2f64(<2 x double> [[MIN1]], <2 x double> [[MIN2]])
+; CHECK-NEXT:    ret <2 x double> [[VAL]]
 ;
-  %min1 = call float @llvm.minnum.f32(float %x, float %y)
-  %min2 = call float @llvm.minnum.f32(float %x, float %y)
-  %val = call float @llvm.maxnum.f32(float %min1, float %min2)
-  ret float %val
+  %min1 = call <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double> %y)
+  %min2 = call <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double> %y)
+  %val = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %min1, <2 x double> %min2)
+  ret <2 x double> %val
 }
 
 define float @maxnum_maxnum_maxnum(float %x, float %y) {
@@ -1356,17 +1359,17 @@ define float @maxnum_maxnum_maxnum(float %x, float %y) {
   ret float %val
 }
 
-define float @minnum_maxnum_minnum(float %x, float %y) {
+define double @minnum_maxnum_minnum(double %x, double %y) {
 ; CHECK-LABEL: @minnum_maxnum_minnum(
-; CHECK-NEXT:    [[MAX:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MIN:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.minnum.f32(float [[MAX]], float [[MIN]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MAX:%.*]] = call double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
+; CHECK-NEXT:    [[MIN:%.*]] = call double @llvm.minnum.f64(double [[X]], double [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call double @llvm.minnum.f64(double [[MAX]], double [[MIN]])
+; CHECK-NEXT:    ret double [[VAL]]
 ;
-  %max = call float @llvm.maxnum.f32(float %x, float %y)
-  %min = call float @llvm.minnum.f32(float %x, float %y)
-  %val = call float @llvm.minnum.f32(float %max, float %min)
-  ret float %val
+  %max = call double @llvm.maxnum.f64(double %x, double %y)
+  %min = call double @llvm.minnum.f64(double %x, double %y)
+  %val = call double @llvm.minnum.f64(double %max, double %min)
+  ret double %val
 }
 
 define float @minnum_minnum_maxnum(float %x, float %y) {
@@ -1382,28 +1385,28 @@ define float @minnum_minnum_maxnum(float %x, float %y) {
   ret float %val
 }
 
-define float @minnum_maxnum_maxnum(float %x, float %y) {
+define <2 x float> @minnum_maxnum_maxnum(<2 x float> %x, <2 x float> %y) {
 ; CHECK-LABEL: @minnum_maxnum_maxnum(
-; CHECK-NEXT:    [[MAX1:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MAX2:%.*]] = call float @llvm.maxnum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.minnum.f32(float [[MAX1]], float [[MAX2]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MAX1:%.*]] = call <2 x float> @llvm.maxnum.v2f32(<2 x float> [[X:%.*]], <2 x float> [[Y:%.*]])
+; CHECK-NEXT:    [[MAX2:%.*]] = call <2 x float> @llvm.maxnum.v2f32(<2 x float> [[X]], <2 x float> [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call <2 x float> @llvm.minnum.v2f32(<2 x float> [[MAX1]], <2 x float> [[MAX2]])
+; CHECK-NEXT:    ret <2 x float> [[VAL]]
 ;
-  %max1 = call float @llvm.maxnum.f32(float %x, float %y)
-  %max2 = call float @llvm.maxnum.f32(float %x, float %y)
-  %val = call float @llvm.minnum.f32(float %max1, float %max2)
-  ret float %val
+  %max1 = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %x, <2 x float> %y)
+  %max2 = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %x, <2 x float> %y)
+  %val = call <2 x float> @llvm.minnum.v2f32(<2 x float> %max1, <2 x float> %max2)
+  ret <2 x float> %val
 }
 
-define float @minnum_minnum_minmum(float %x, float %y) {
+define <2 x double> @minnum_minnum_minmum(<2 x double> %x, <2 x double> %y) {
 ; CHECK-LABEL: @minnum_minnum_minmum(
-; CHECK-NEXT:    [[MIN1:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
-; CHECK-NEXT:    [[MIN2:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[Y]])
-; CHECK-NEXT:    [[VAL:%.*]] = call float @llvm.minnum.f32(float [[MIN1]], float [[MIN2]])
-; CHECK-NEXT:    ret float [[VAL]]
+; CHECK-NEXT:    [[MIN1:%.*]] = call <2 x double> @llvm.minnum.v2f64(<2 x double> [[X:%.*]], <2 x double> [[Y:%.*]])
+; CHECK-NEXT:    [[MIN2:%.*]] = call <2 x double> @llvm.minnum.v2f64(<2 x double> [[X]], <2 x double> [[Y]])
+; CHECK-NEXT:    [[VAL:%.*]] = call <2 x double> @llvm.minnum.v2f64(<2 x double> [[MIN1]], <2 x double> [[MIN2]])
+; CHECK-NEXT:    ret <2 x double> [[VAL]]
 ;
-  %min1 = call float @llvm.minnum.f32(float %x, float %y)
-  %min2 = call float @llvm.minnum.f32(float %x, float %y)
-  %val = call float @llvm.minnum.f32(float %min1, float %min2)
-  ret float %val
+  %min1 = call <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double> %y)
+  %min2 = call <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double> %y)
+  %val = call <2 x double> @llvm.minnum.v2f64(<2 x double> %min1, <2 x double> %min2)
+  ret <2 x double> %val
 }


        


More information about the llvm-commits mailing list