Skip to content

Commit 73cba8d

Browse files
wsmosesZuseZ4
andauthored
Fix shuffle canonicalization (rust-lang#819)
* Fix shuffle canonicalization * Add assertion Co-authored-by: Manuel Drehwald <[email protected]>
1 parent 21fb654 commit 73cba8d

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

enzyme/Enzyme/AdjointGenerator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11697,6 +11697,7 @@ class AdjointGenerator
1169711697
if (subretused) {
1169811698
Value *dcall = nullptr;
1169911699
assert(returnIdx);
11700+
assert(augmentcall);
1170011701
dcall = (returnIdx.getValue() < 0)
1170111702
? augmentcall
1170211703
: BuilderZ.CreateExtractValue(

enzyme/Enzyme/TypeAnalysis/TypeAnalysis.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2032,7 +2032,7 @@ void TypeAnalyzer::visitShuffleVectorInst(ShuffleVectorInst &I) {
20322032
if (direction & DOWN) {
20332033
result |= TypeTree(BaseType::Anything)
20342034
.Only(-1)
2035-
.ShiftIndices(dl, 0, size, size * i);
2035+
.ShiftIndices(dl, 0, size, newOff);
20362036
}
20372037
} else {
20382038
if ((size_t)mask[i] < numFirst) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
; RUN: %opt < %s %loadEnzyme -print-type-analysis -type-analysis-func=err -o /dev/null | FileCheck %s
2+
3+
define internal void @err() {
4+
bb:
5+
%a3 = alloca <4 x i32>, align 4
6+
%wide.load.le = load <4 x i32>, <4 x i32>* %a3, align 4
7+
%a4 = icmp slt <4 x i32> %wide.load.le, <i32 1, i32 1, i32 1, i32 1>
8+
%shift = shufflevector <4 x i1> %a4, <4 x i1> zeroinitializer, <4 x i32> <i32 undef, i32 undef, i32 3, i32 undef>
9+
ret void
10+
}
11+
12+
; CHECK: err - {} |
13+
; CHECK-NEXT: bb
14+
; CHECK-NEXT: %a3 = alloca <4 x i32>, align 4: {[-1]:Pointer}
15+
; CHECK-NEXT: %wide.load.le = load <4 x i32>, <4 x i32>* %a3, align 4: {}
16+
; CHECK-NEXT: %a4 = icmp slt <4 x i32> %wide.load.le, <i32 1, i32 1, i32 1, i32 1>: {[-1]:Integer}
17+
; CHECK-NEXT: %shift = shufflevector <4 x i1> %a4, <4 x i1> zeroinitializer, <4 x i32> <i32 undef, i32 undef, i32 3, i32 undef>: {[-1]:Anything}
18+
; CHECK-NEXT: ret void: {}

0 commit comments

Comments
 (0)