| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #pragma once
- class IntOverflowDoesNotMatterRange
- {
- private:
- IR::Instr *firstInstr;
- IR::Instr *const lastInstr;
- // These syms are required to have int values before the first instruction (before we start ignoring int overflows in this
- // on instructions in this range). Any bailouts necessary to force them to ints need to be inserted before the range.
- BVSparse<JitArenaAllocator> symsRequiredToBeInt;
- BVSparse<JitArenaAllocator> symsRequiredToBeLossyInt; // these are a subset of the above bit-vector
- IntOverflowDoesNotMatterRange *const next;
- public:
- IntOverflowDoesNotMatterRange(
- JitArenaAllocator *const allocator,
- IR::Instr *const firstInstr,
- IR::Instr *const lastInstr,
- IntOverflowDoesNotMatterRange *const next)
- : firstInstr(firstInstr),
- lastInstr(lastInstr),
- symsRequiredToBeInt(allocator),
- symsRequiredToBeLossyInt(allocator),
- next(next)
- {
- Assert(firstInstr);
- Assert(lastInstr);
- Assert(lastInstr->m_opcode == Js::OpCode::NoIntOverflowBoundary);
- }
- static IntOverflowDoesNotMatterRange *New(
- JitArenaAllocator *const allocator,
- IR::Instr *const firstInstr,
- IR::Instr *const lastInstr,
- IntOverflowDoesNotMatterRange *const next)
- {
- return JitAnew(allocator, IntOverflowDoesNotMatterRange, allocator, firstInstr, lastInstr, next);
- }
- void Delete(JitArenaAllocator *const allocator)
- {
- JitAdelete(allocator, this);
- }
- public:
- IR::Instr *FirstInstr() const
- {
- return firstInstr;
- }
- void SetFirstInstr(IR::Instr *const firstInstr)
- {
- Assert(firstInstr);
- this->firstInstr = firstInstr;
- }
- IR::Instr *LastInstr() const
- {
- return lastInstr;
- }
- BVSparse<JitArenaAllocator> *SymsRequiredToBeInt()
- {
- return &symsRequiredToBeInt;
- }
- BVSparse<JitArenaAllocator> *SymsRequiredToBeLossyInt()
- {
- return &symsRequiredToBeLossyInt;
- }
- IntOverflowDoesNotMatterRange *Next() const
- {
- return next;
- }
- PREVENT_COPY(IntOverflowDoesNotMatterRange)
- };
|