diff options
| author | Sander de Smalen <sander.desmalen@arm.com> | 2019-06-13 09:37:38 +0000 |
|---|---|---|
| committer | Sander de Smalen <sander.desmalen@arm.com> | 2019-06-13 09:37:38 +0000 |
| commit | 51c2fa0e2ac1ee0afdffb45ff3c2bac4bf09c3cf (patch) | |
| tree | 49360c0aef3239b611cbd42593dc54c2f6470098 /llvm/test/CodeGen/Generic | |
| parent | 8d59f5370d46a2b9cb2714a3342eb58bacd52580 (diff) | |
| download | bcm5719-llvm-51c2fa0e2ac1ee0afdffb45ff3c2bac4bf09c3cf.tar.gz bcm5719-llvm-51c2fa0e2ac1ee0afdffb45ff3c2bac4bf09c3cf.zip | |
Improve reduction intrinsics by overloading result value.
This patch uses the mechanism from D62995 to strengthen the
definitions of the reduction intrinsics by letting the scalar
result/accumulator type be overloaded from the vector element type.
For example:
; The LLVM LangRef specifies that the scalar result must equal the
; vector element type, but this is not checked/enforced by LLVM.
declare i32 @llvm.experimental.vector.reduce.or.i32.v4i32(<4 x i32> %a)
This patch changes that into:
declare i32 @llvm.experimental.vector.reduce.or.v4i32(<4 x i32> %a)
Which has the type-constraint more explicit and causes LLVM to check
the result type with the vector element type.
Reviewers: RKSimon, arsenm, rnk, greened, aemerson
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D62996
llvm-svn: 363240
Diffstat (limited to 'llvm/test/CodeGen/Generic')
| -rw-r--r-- | llvm/test/CodeGen/Generic/expand-experimental-reductions.ll | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/llvm/test/CodeGen/Generic/expand-experimental-reductions.ll b/llvm/test/CodeGen/Generic/expand-experimental-reductions.ll index 5fc7427a9aa..a13c23d2e59 100644 --- a/llvm/test/CodeGen/Generic/expand-experimental-reductions.ll +++ b/llvm/test/CodeGen/Generic/expand-experimental-reductions.ll @@ -1,22 +1,22 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -expand-reductions -S | FileCheck %s ; Tests without a target which should expand all reductions -declare i64 @llvm.experimental.vector.reduce.add.i64.v2i64(<2 x i64>) -declare i64 @llvm.experimental.vector.reduce.mul.i64.v2i64(<2 x i64>) -declare i64 @llvm.experimental.vector.reduce.and.i64.v2i64(<2 x i64>) -declare i64 @llvm.experimental.vector.reduce.or.i64.v2i64(<2 x i64>) -declare i64 @llvm.experimental.vector.reduce.xor.i64.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.mul.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.and.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.or.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.xor.v2i64(<2 x i64>) declare float @llvm.experimental.vector.reduce.v2.fadd.f32.v4f32(float, <4 x float>) declare float @llvm.experimental.vector.reduce.v2.fmul.f32.v4f32(float, <4 x float>) -declare i64 @llvm.experimental.vector.reduce.smax.i64.v2i64(<2 x i64>) -declare i64 @llvm.experimental.vector.reduce.smin.i64.v2i64(<2 x i64>) -declare i64 @llvm.experimental.vector.reduce.umax.i64.v2i64(<2 x i64>) -declare i64 @llvm.experimental.vector.reduce.umin.i64.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.smax.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.smin.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.umax.v2i64(<2 x i64>) +declare i64 @llvm.experimental.vector.reduce.umin.v2i64(<2 x i64>) -declare double @llvm.experimental.vector.reduce.fmax.f64.v2f64(<2 x double>) -declare double @llvm.experimental.vector.reduce.fmin.f64.v2f64(<2 x double>) +declare double @llvm.experimental.vector.reduce.fmax.v2f64(<2 x double>) +declare double @llvm.experimental.vector.reduce.fmin.v2f64(<2 x double>) define i64 @add_i64(<2 x i64> %vec) { @@ -28,7 +28,7 @@ define i64 @add_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.add.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64> %vec) ret i64 %r } @@ -41,7 +41,7 @@ define i64 @mul_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.mul.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.mul.v2i64(<2 x i64> %vec) ret i64 %r } @@ -54,7 +54,7 @@ define i64 @and_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.and.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.and.v2i64(<2 x i64> %vec) ret i64 %r } @@ -67,7 +67,7 @@ define i64 @or_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.or.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.or.v2i64(<2 x i64> %vec) ret i64 %r } @@ -80,7 +80,7 @@ define i64 @xor_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.xor.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.xor.v2i64(<2 x i64> %vec) ret i64 %r } @@ -230,7 +230,7 @@ define i64 @smax_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.smax.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.smax.v2i64(<2 x i64> %vec) ret i64 %r } @@ -244,7 +244,7 @@ define i64 @smin_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.smin.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.smin.v2i64(<2 x i64> %vec) ret i64 %r } @@ -258,7 +258,7 @@ define i64 @umax_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.umax.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.umax.v2i64(<2 x i64> %vec) ret i64 %r } @@ -272,7 +272,7 @@ define i64 @umin_i64(<2 x i64> %vec) { ; CHECK-NEXT: ret i64 [[TMP0]] ; entry: - %r = call i64 @llvm.experimental.vector.reduce.umin.i64.v2i64(<2 x i64> %vec) + %r = call i64 @llvm.experimental.vector.reduce.umin.v2i64(<2 x i64> %vec) ret i64 %r } @@ -286,7 +286,7 @@ define double @fmax_f64(<2 x double> %vec) { ; CHECK-NEXT: ret double [[TMP0]] ; entry: - %r = call double @llvm.experimental.vector.reduce.fmax.f64.v2f64(<2 x double> %vec) + %r = call double @llvm.experimental.vector.reduce.fmax.v2f64(<2 x double> %vec) ret double %r } @@ -300,6 +300,6 @@ define double @fmin_f64(<2 x double> %vec) { ; CHECK-NEXT: ret double [[TMP0]] ; entry: - %r = call double @llvm.experimental.vector.reduce.fmin.f64.v2f64(<2 x double> %vec) + %r = call double @llvm.experimental.vector.reduce.fmin.v2f64(<2 x double> %vec) ret double %r } |

