Skip to content

Commit 6ea8e94

Browse files
authored
Hoisted selection variable declaration in ExprConstant
1 parent a6b108e commit 6ea8e94

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

clang/lib/AST/ExprConstant.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11646,19 +11646,18 @@ static bool evalPshufBuiltin(EvalInfo &Info, const CallExpr *Call,
1164611646
unsigned LaneBase = (Idx / LaneElts) * LaneElts;
1164711647
unsigned LaneIdx = Idx % LaneElts;
1164811648
unsigned SrcIdx = Idx;
11649+
unsigned Sel = (Ctl >> (2 * LaneIdx)) & 0x3;
1164911650

1165011651
if (ElemBits == 32) {
11651-
unsigned Sel = (Ctl >> (2 * LaneIdx)) & 0x3;
1165211652
SrcIdx = LaneBase + Sel;
1165311653
} else {
1165411654
constexpr unsigned HalfSize = 4;
1165511655
bool InHigh = LaneIdx >= HalfSize;
1165611656
if (!IsShufHW && !InHigh) {
11657-
unsigned Sel = (Ctl >> (2 * LaneIdx)) & 0x3;
1165811657
SrcIdx = LaneBase + Sel;
1165911658
} else if (IsShufHW && InHigh) {
1166011659
unsigned Rel = LaneIdx - HalfSize;
11661-
unsigned Sel = (Ctl >> (2 * Rel)) & 0x3;
11660+
Sel = (Ctl >> (2 * Rel)) & 0x3;
1166211661
SrcIdx = LaneBase + HalfSize + Sel;
1166311662
}
1166411663
}

0 commit comments

Comments
 (0)