Skip to content

Commit 51c2fa0

Browse files
committedJun 13, 2019
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
1 parent 8d59f53 commit 51c2fa0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+5283
-5258
lines changed
 

‎llvm/docs/LangRef.rst

+15-15
Original file line numberDiff line numberDiff line change
@@ -13719,8 +13719,8 @@ Syntax:
1371913719

1372013720
::
1372113721

13722-
declare i32 @llvm.experimental.vector.reduce.add.i32.v4i32(<4 x i32> %a)
13723-
declare i64 @llvm.experimental.vector.reduce.add.i64.v2i64(<2 x i64> %a)
13722+
declare i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> %a)
13723+
declare i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64> %a)
1372413724

1372513725
Overview:
1372613726
"""""""""
@@ -13780,8 +13780,8 @@ Syntax:
1378013780

1378113781
::
1378213782

13783-
declare i32 @llvm.experimental.vector.reduce.mul.i32.v4i32(<4 x i32> %a)
13784-
declare i64 @llvm.experimental.vector.reduce.mul.i64.v2i64(<2 x i64> %a)
13783+
declare i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> %a)
13784+
declare i64 @llvm.experimental.vector.reduce.mul.v2i64(<2 x i64> %a)
1378513785

1378613786
Overview:
1378713787
"""""""""
@@ -13840,7 +13840,7 @@ Syntax:
1384013840

1384113841
::
1384213842

13843-
declare i32 @llvm.experimental.vector.reduce.and.i32.v4i32(<4 x i32> %a)
13843+
declare i32 @llvm.experimental.vector.reduce.and.v4i32(<4 x i32> %a)
1384413844

1384513845
Overview:
1384613846
"""""""""
@@ -13861,7 +13861,7 @@ Syntax:
1386113861

1386213862
::
1386313863

13864-
declare i32 @llvm.experimental.vector.reduce.or.i32.v4i32(<4 x i32> %a)
13864+
declare i32 @llvm.experimental.vector.reduce.or.v4i32(<4 x i32> %a)
1386513865

1386613866
Overview:
1386713867
"""""""""
@@ -13882,7 +13882,7 @@ Syntax:
1388213882

1388313883
::
1388413884

13885-
declare i32 @llvm.experimental.vector.reduce.xor.i32.v4i32(<4 x i32> %a)
13885+
declare i32 @llvm.experimental.vector.reduce.xor.v4i32(<4 x i32> %a)
1388613886

1388713887
Overview:
1388813888
"""""""""
@@ -13903,7 +13903,7 @@ Syntax:
1390313903

1390413904
::
1390513905

13906-
declare i32 @llvm.experimental.vector.reduce.smax.i32.v4i32(<4 x i32> %a)
13906+
declare i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %a)
1390713907

1390813908
Overview:
1390913909
"""""""""
@@ -13924,7 +13924,7 @@ Syntax:
1392413924

1392513925
::
1392613926

13927-
declare i32 @llvm.experimental.vector.reduce.smin.i32.v4i32(<4 x i32> %a)
13927+
declare i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %a)
1392813928

1392913929
Overview:
1393013930
"""""""""
@@ -13945,7 +13945,7 @@ Syntax:
1394513945

1394613946
::
1394713947

13948-
declare i32 @llvm.experimental.vector.reduce.umax.i32.v4i32(<4 x i32> %a)
13948+
declare i32 @llvm.experimental.vector.reduce.umax.v4i32(<4 x i32> %a)
1394913949

1395013950
Overview:
1395113951
"""""""""
@@ -13966,7 +13966,7 @@ Syntax:
1396613966

1396713967
::
1396813968

13969-
declare i32 @llvm.experimental.vector.reduce.umin.i32.v4i32(<4 x i32> %a)
13969+
declare i32 @llvm.experimental.vector.reduce.umin.v4i32(<4 x i32> %a)
1397013970

1397113971
Overview:
1397213972
"""""""""
@@ -13987,8 +13987,8 @@ Syntax:
1398713987

1398813988
::
1398913989

13990-
declare float @llvm.experimental.vector.reduce.fmax.f32.v4f32(<4 x float> %a)
13991-
declare double @llvm.experimental.vector.reduce.fmax.f64.v2f64(<2 x double> %a)
13990+
declare float @llvm.experimental.vector.reduce.fmax.v4f32(<4 x float> %a)
13991+
declare double @llvm.experimental.vector.reduce.fmax.v2f64(<2 x double> %a)
1399213992

1399313993
Overview:
1399413994
"""""""""
@@ -14012,8 +14012,8 @@ Syntax:
1401214012

1401314013
::
1401414014

14015-
declare float @llvm.experimental.vector.reduce.fmin.f32.v4f32(<4 x float> %a)
14016-
declare double @llvm.experimental.vector.reduce.fmin.f64.v2f64(<2 x double> %a)
14015+
declare float @llvm.experimental.vector.reduce.fmin.v4f32(<4 x float> %a)
14016+
declare double @llvm.experimental.vector.reduce.fmin.v2f64(<2 x double> %a)
1401714017

1401814018
Overview:
1401914019
"""""""""

‎llvm/include/llvm/IR/Intrinsics.h

+5-3
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ namespace Intrinsic {
9999
Void, VarArg, MMX, Token, Metadata, Half, Float, Double, Quad,
100100
Integer, Vector, Pointer, Struct,
101101
Argument, ExtendArgument, TruncArgument, HalfVecArgument,
102-
SameVecWidthArgument, PtrToArgument, PtrToElt, VecOfAnyPtrsToElt
102+
SameVecWidthArgument, PtrToArgument, PtrToElt, VecOfAnyPtrsToElt,
103+
VecElementArgument
103104
} Kind;
104105

105106
union {
@@ -124,13 +125,14 @@ namespace Intrinsic {
124125
assert(Kind == Argument || Kind == ExtendArgument ||
125126
Kind == TruncArgument || Kind == HalfVecArgument ||
126127
Kind == SameVecWidthArgument || Kind == PtrToArgument ||
127-
Kind == PtrToElt);
128+
Kind == PtrToElt || Kind == VecElementArgument);
128129
return Argument_Info >> 3;
129130
}
130131
ArgKind getArgumentKind() const {
131132
assert(Kind == Argument || Kind == ExtendArgument ||
132133
Kind == TruncArgument || Kind == HalfVecArgument ||
133-
Kind == SameVecWidthArgument || Kind == PtrToArgument);
134+
Kind == SameVecWidthArgument || Kind == PtrToArgument ||
135+
Kind == VecElementArgument);
134136
return (ArgKind)(Argument_Info & 7);
135137
}
136138

0 commit comments

Comments
 (0)
Please sign in to comment.