@@ -2981,39 +2981,40 @@ struct SelectCaseOpConversion : public fir::FIROpConversion<fir::SelectCaseOp> {
2981
2981
caseOp.getSuccessorOperands (adaptor.getOperands (), t);
2982
2982
std::optional<mlir::ValueRange> cmpOps =
2983
2983
*caseOp.getCompareOperands (adaptor.getOperands (), t);
2984
- mlir::Value caseArg = *(cmpOps.value ().begin ());
2985
2984
mlir::Attribute attr = cases[t];
2985
+ assert (mlir::isa<mlir::UnitAttr>(attr) || cmpOps.has_value ());
2986
2986
if (mlir::isa<fir::PointIntervalAttr>(attr)) {
2987
2987
auto cmp = rewriter.create <mlir::LLVM::ICmpOp>(
2988
- loc, mlir::LLVM::ICmpPredicate::eq, selector, caseArg );
2988
+ loc, mlir::LLVM::ICmpPredicate::eq, selector, cmpOps-> front () );
2989
2989
genCaseLadderStep (loc, cmp, dest, destOps, rewriter);
2990
2990
continue ;
2991
2991
}
2992
2992
if (mlir::isa<fir::LowerBoundAttr>(attr)) {
2993
2993
auto cmp = rewriter.create <mlir::LLVM::ICmpOp>(
2994
- loc, mlir::LLVM::ICmpPredicate::sle, caseArg , selector);
2994
+ loc, mlir::LLVM::ICmpPredicate::sle, cmpOps-> front () , selector);
2995
2995
genCaseLadderStep (loc, cmp, dest, destOps, rewriter);
2996
2996
continue ;
2997
2997
}
2998
2998
if (mlir::isa<fir::UpperBoundAttr>(attr)) {
2999
2999
auto cmp = rewriter.create <mlir::LLVM::ICmpOp>(
3000
- loc, mlir::LLVM::ICmpPredicate::sle, selector, caseArg );
3000
+ loc, mlir::LLVM::ICmpPredicate::sle, selector, cmpOps-> front () );
3001
3001
genCaseLadderStep (loc, cmp, dest, destOps, rewriter);
3002
3002
continue ;
3003
3003
}
3004
3004
if (mlir::isa<fir::ClosedIntervalAttr>(attr)) {
3005
- auto cmp = rewriter.create <mlir::LLVM::ICmpOp>(
3006
- loc, mlir::LLVM::ICmpPredicate::sle, caseArg, selector);
3005
+ mlir::Value caseArg0 = *cmpOps->begin ();
3006
+ auto cmp0 = rewriter.create <mlir::LLVM::ICmpOp>(
3007
+ loc, mlir::LLVM::ICmpPredicate::sle, caseArg0, selector);
3007
3008
auto *thisBlock = rewriter.getInsertionBlock ();
3008
3009
auto *newBlock1 = createBlock (rewriter, dest);
3009
3010
auto *newBlock2 = createBlock (rewriter, dest);
3010
3011
rewriter.setInsertionPointToEnd (thisBlock);
3011
- rewriter.create <mlir::LLVM::CondBrOp>(loc, cmp , newBlock1, newBlock2);
3012
+ rewriter.create <mlir::LLVM::CondBrOp>(loc, cmp0 , newBlock1, newBlock2);
3012
3013
rewriter.setInsertionPointToEnd (newBlock1);
3013
- mlir::Value caseArg0 = *(cmpOps. value (). begin () + 1 );
3014
- auto cmp0 = rewriter.create <mlir::LLVM::ICmpOp>(
3015
- loc, mlir::LLVM::ICmpPredicate::sle, selector, caseArg0 );
3016
- genCondBrOp (loc, cmp0 , dest, destOps, rewriter, newBlock2);
3014
+ mlir::Value caseArg1 = *(cmpOps-> begin () + 1 );
3015
+ auto cmp1 = rewriter.create <mlir::LLVM::ICmpOp>(
3016
+ loc, mlir::LLVM::ICmpPredicate::sle, selector, caseArg1 );
3017
+ genCondBrOp (loc, cmp1 , dest, destOps, rewriter, newBlock2);
3017
3018
rewriter.setInsertionPointToEnd (newBlock2);
3018
3019
continue ;
3019
3020
}
0 commit comments