[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