@@ -1433,14 +1433,29 @@ const analysis::Constant* FoldMin(const analysis::Type* result_type,
1433
1433
const analysis::Constant* b,
1434
1434
analysis::ConstantManager*) {
1435
1435
if (const analysis::Integer* int_type = result_type->AsInteger ()) {
1436
- if (int_type->width () == 32 ) {
1436
+ if (int_type->width () <= 32 ) {
1437
+ assert (
1438
+ (a->AsIntConstant () != nullptr || a->AsNullConstant () != nullptr ) &&
1439
+ " Must be an integer or null constant." );
1440
+ assert (
1441
+ (b->AsIntConstant () != nullptr || b->AsNullConstant () != nullptr ) &&
1442
+ " Must be an integer or null constant." );
1443
+
1437
1444
if (int_type->IsSigned ()) {
1438
- int32_t va = a->GetS32 ();
1439
- int32_t vb = b->GetS32 ();
1445
+ int32_t va = (a->AsIntConstant () != nullptr )
1446
+ ? a->AsIntConstant ()->GetS32BitValue ()
1447
+ : 0 ;
1448
+ int32_t vb = (b->AsIntConstant () != nullptr )
1449
+ ? b->AsIntConstant ()->GetS32BitValue ()
1450
+ : 0 ;
1440
1451
return (va < vb ? a : b);
1441
1452
} else {
1442
- uint32_t va = a->GetU32 ();
1443
- uint32_t vb = b->GetU32 ();
1453
+ uint32_t va = (a->AsIntConstant () != nullptr )
1454
+ ? a->AsIntConstant ()->GetU32BitValue ()
1455
+ : 0 ;
1456
+ uint32_t vb = (b->AsIntConstant () != nullptr )
1457
+ ? b->AsIntConstant ()->GetU32BitValue ()
1458
+ : 0 ;
1444
1459
return (va < vb ? a : b);
1445
1460
}
1446
1461
} else if (int_type->width () == 64 ) {
@@ -1473,14 +1488,29 @@ const analysis::Constant* FoldMax(const analysis::Type* result_type,
1473
1488
const analysis::Constant* b,
1474
1489
analysis::ConstantManager*) {
1475
1490
if (const analysis::Integer* int_type = result_type->AsInteger ()) {
1476
- if (int_type->width () == 32 ) {
1491
+ if (int_type->width () <= 32 ) {
1492
+ assert (
1493
+ (a->AsIntConstant () != nullptr || a->AsNullConstant () != nullptr ) &&
1494
+ " Must be an integer or null constant." );
1495
+ assert (
1496
+ (b->AsIntConstant () != nullptr || b->AsNullConstant () != nullptr ) &&
1497
+ " Must be an integer or null constant." );
1498
+
1477
1499
if (int_type->IsSigned ()) {
1478
- int32_t va = a->GetS32 ();
1479
- int32_t vb = b->GetS32 ();
1500
+ int32_t va = (a->AsIntConstant () != nullptr )
1501
+ ? a->AsIntConstant ()->GetS32BitValue ()
1502
+ : 0 ;
1503
+ int32_t vb = (b->AsIntConstant () != nullptr )
1504
+ ? b->AsIntConstant ()->GetS32BitValue ()
1505
+ : 0 ;
1480
1506
return (va > vb ? a : b);
1481
1507
} else {
1482
- uint32_t va = a->GetU32 ();
1483
- uint32_t vb = b->GetU32 ();
1508
+ uint32_t va = (a->AsIntConstant () != nullptr )
1509
+ ? a->AsIntConstant ()->GetU32BitValue ()
1510
+ : 0 ;
1511
+ uint32_t vb = (b->AsIntConstant () != nullptr )
1512
+ ? b->AsIntConstant ()->GetU32BitValue ()
1513
+ : 0 ;
1484
1514
return (va > vb ? a : b);
1485
1515
}
1486
1516
} else if (int_type->width () == 64 ) {
0 commit comments