@@ -5838,10 +5838,24 @@ bool SimplifyCFGOpt::turnSwitchRangeIntoICmp(SwitchInst *SI,
58385838 bool IsWrapping = false ;
58395839 SmallVectorImpl<ConstantInt *> *ContiguousCases = &CasesA;
58405840 SmallVectorImpl<ConstantInt *> *OtherCases = &CasesB;
5841+
5842+ // Only one icmp is needed when there is only one case.
5843+ if (!HasDefault && CasesA.size () == 1 ) {
5844+ ContiguousCasesMax = CasesA[0 ];
5845+ ContiguousCasesMin = CasesA[0 ];
5846+ ContiguousDest = DestA;
5847+ OtherDest = DestB;
5848+ } else if (CasesB.size () == 1 ) {
5849+ ContiguousCasesMax = CasesB[0 ];
5850+ ContiguousCasesMin = CasesB[0 ];
5851+ ContiguousDest = DestB;
5852+ OtherDest = DestA;
5853+ std::swap (ContiguousCases, OtherCases);
5854+ }
58415855 // Correctness: Cases to the default destination cannot be contiguous cases.
5842- if (!HasDefault && !CasesA.empty () &&
5843- casesAreContiguous (SI->getCondition (), CasesA, ContiguousCasesMin,
5844- ContiguousCasesMax, IsWrapping)) {
5856+ else if (!HasDefault && !CasesA.empty () &&
5857+ casesAreContiguous (SI->getCondition (), CasesA, ContiguousCasesMin,
5858+ ContiguousCasesMax, IsWrapping)) {
58455859 ContiguousDest = DestA;
58465860 OtherDest = DestB;
58475861 } else if (casesAreContiguous (SI->getCondition (), CasesB, ContiguousCasesMin,
0 commit comments