Skip to content

Commit fa3af82

Browse files
author
Boris Ulasevich
committed
8338197: [ubsan] ad_x86.hpp:6417:11: runtime error: shift exponent 100 is too large for 32-bit type 'unsigned int'
Reviewed-by: kvn, dlong
1 parent 4df41d2 commit fa3af82

File tree

1 file changed

+11
-17
lines changed

1 file changed

+11
-17
lines changed

src/hotspot/share/adlc/output_h.cpp

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -759,20 +759,15 @@ void ArchDesc::declare_pipe_classes(FILE *fp_hpp) {
759759

760760
if (_pipeline->_maxcycleused <= 32) {
761761
fprintf(fp_hpp, "protected:\n");
762-
fprintf(fp_hpp, " %s _mask;\n\n", _pipeline->_maxcycleused <= 32 ? "uint" : "uint64_t" );
762+
fprintf(fp_hpp, " uint32_t _mask;\n\n");
763763
fprintf(fp_hpp, "public:\n");
764764
fprintf(fp_hpp, " Pipeline_Use_Cycle_Mask() : _mask(0) {}\n\n");
765-
if (_pipeline->_maxcycleused <= 32)
766-
fprintf(fp_hpp, " Pipeline_Use_Cycle_Mask(uint mask) : _mask(mask) {}\n\n");
767-
else {
768-
fprintf(fp_hpp, " Pipeline_Use_Cycle_Mask(uint mask1, uint mask2) : _mask((((uint64_t)mask1) << 32) | mask2) {}\n\n");
769-
fprintf(fp_hpp, " Pipeline_Use_Cycle_Mask(uint64_t mask) : _mask(mask) {}\n\n");
770-
}
765+
fprintf(fp_hpp, " Pipeline_Use_Cycle_Mask(uint32_t mask) : _mask(mask) {}\n\n");
771766
fprintf(fp_hpp, " bool overlaps(const Pipeline_Use_Cycle_Mask &in2) const {\n");
772767
fprintf(fp_hpp, " return ((_mask & in2._mask) != 0);\n");
773768
fprintf(fp_hpp, " }\n\n");
774769
fprintf(fp_hpp, " Pipeline_Use_Cycle_Mask& operator<<=(int n) {\n");
775-
fprintf(fp_hpp, " _mask <<= n;\n");
770+
fprintf(fp_hpp, " _mask <<= (n < 32) ? n : 31;\n");
776771
fprintf(fp_hpp, " return *this;\n");
777772
fprintf(fp_hpp, " }\n\n");
778773
fprintf(fp_hpp, " void Or(const Pipeline_Use_Cycle_Mask &in2) {\n");
@@ -785,7 +780,7 @@ void ArchDesc::declare_pipe_classes(FILE *fp_hpp) {
785780
fprintf(fp_hpp, "protected:\n");
786781
uint masklen = (_pipeline->_maxcycleused + 31) >> 5;
787782
uint l;
788-
fprintf(fp_hpp, " uint ");
783+
fprintf(fp_hpp, " uint32_t ");
789784
for (l = 1; l <= masklen; l++)
790785
fprintf(fp_hpp, "_mask%d%s", l, l < masklen ? ", " : ";\n\n");
791786
fprintf(fp_hpp, "public:\n");
@@ -794,7 +789,7 @@ void ArchDesc::declare_pipe_classes(FILE *fp_hpp) {
794789
fprintf(fp_hpp, "_mask%d(0)%s", l, l < masklen ? ", " : " {}\n\n");
795790
fprintf(fp_hpp, " Pipeline_Use_Cycle_Mask(");
796791
for (l = 1; l <= masklen; l++)
797-
fprintf(fp_hpp, "uint mask%d%s", l, l < masklen ? ", " : ") : ");
792+
fprintf(fp_hpp, "uint32_t mask%d%s", l, l < masklen ? ", " : ") : ");
798793
for (l = 1; l <= masklen; l++)
799794
fprintf(fp_hpp, "_mask%d(mask%d)%s", l, l, l < masklen ? ", " : " {}\n\n");
800795

@@ -805,10 +800,10 @@ void ArchDesc::declare_pipe_classes(FILE *fp_hpp) {
805800
fprintf(fp_hpp, " return out;\n");
806801
fprintf(fp_hpp, " }\n\n");
807802
fprintf(fp_hpp, " bool overlaps(const Pipeline_Use_Cycle_Mask &in2) const {\n");
808-
fprintf(fp_hpp, " return (");
803+
fprintf(fp_hpp, " return ");
809804
for (l = 1; l <= masklen; l++)
810805
fprintf(fp_hpp, "((_mask%d & in2._mask%d) != 0)%s", l, l, l < masklen ? " || " : "");
811-
fprintf(fp_hpp, ") ? true : false;\n");
806+
fprintf(fp_hpp, ";\n");
812807
fprintf(fp_hpp, " }\n\n");
813808
fprintf(fp_hpp, " Pipeline_Use_Cycle_Mask& operator<<=(int n) {\n");
814809
fprintf(fp_hpp, " if (n >= 32)\n");
@@ -819,10 +814,10 @@ void ArchDesc::declare_pipe_classes(FILE *fp_hpp) {
819814
fprintf(fp_hpp, " } while ((n -= 32) >= 32);\n\n");
820815
fprintf(fp_hpp, " if (n > 0) {\n");
821816
fprintf(fp_hpp, " uint m = 32 - n;\n");
822-
fprintf(fp_hpp, " uint mask = (1 << n) - 1;\n");
823-
fprintf(fp_hpp, " uint temp%d = mask & (_mask%d >> m); _mask%d <<= n;\n", 2, 1, 1);
817+
fprintf(fp_hpp, " uint32_t mask = (1 << n) - 1;\n");
818+
fprintf(fp_hpp, " uint32_t temp%d = mask & (_mask%d >> m); _mask%d <<= n;\n", 2, 1, 1);
824819
for (l = 2; l < masklen; l++) {
825-
fprintf(fp_hpp, " uint temp%d = mask & (_mask%d >> m); _mask%d <<= n; _mask%d |= temp%d;\n", l+1, l, l, l, l);
820+
fprintf(fp_hpp, " uint32_t temp%d = mask & (_mask%d >> m); _mask%d <<= n; _mask%d |= temp%d;\n", l+1, l, l, l, l);
826821
}
827822
fprintf(fp_hpp, " _mask%d <<= n; _mask%d |= temp%d;\n", masklen, masklen, masklen);
828823
fprintf(fp_hpp, " }\n");
@@ -872,8 +867,7 @@ void ArchDesc::declare_pipe_classes(FILE *fp_hpp) {
872867
fprintf(fp_hpp, " }\n\n");
873868
fprintf(fp_hpp, " void step(uint cycles) {\n");
874869
fprintf(fp_hpp, " _used = 0;\n");
875-
fprintf(fp_hpp, " uint max_shift = 8 * sizeof(_mask) - 1;\n");
876-
fprintf(fp_hpp, " _mask <<= (cycles < max_shift) ? cycles : max_shift;\n");
870+
fprintf(fp_hpp, " _mask <<= cycles;\n");
877871
fprintf(fp_hpp, " }\n\n");
878872
fprintf(fp_hpp, " friend class Pipeline_Use;\n");
879873
fprintf(fp_hpp, "};\n\n");

0 commit comments

Comments
 (0)