| Index: src/IceSwitchLowering.cpp
|
| diff --git a/src/IceSwitchLowering.cpp b/src/IceSwitchLowering.cpp
|
| index 06894e6269b4ece4a51d9635c3f040f4db022d49..37e67c12c005651223b84d13b1738b9e2b149a9f 100644
|
| --- a/src/IceSwitchLowering.cpp
|
| +++ b/src/IceSwitchLowering.cpp
|
| @@ -75,9 +75,13 @@ CaseClusterArray CaseCluster::clusterizeSwitch(Cfg *Func,
|
| // Replace everything with a jump table
|
| InstJumpTable *JumpTable =
|
| InstJumpTable::create(Func, TotalRange, Inst->getLabelDefault());
|
| - for (const CaseCluster &Case : CaseClusters)
|
| - for (uint64_t I = Case.Low; I <= Case.High; ++I)
|
| + for (const CaseCluster &Case : CaseClusters) {
|
| + // Case.High could be UINT64_MAX which makes the loop awkward. Unwrap the
|
| + // last iteration to avoid wrap around problems.
|
| + for (uint64_t I = Case.Low; I < Case.High; ++I)
|
| JumpTable->addTarget(I - MinValue, Case.Label);
|
| + JumpTable->addTarget(Case.High - MinValue, Case.Label);
|
| + }
|
|
|
| CaseClusters.clear();
|
| CaseClusters.emplace_back(MinValue, MaxValue, JumpTable);
|
|
|