Closed
Bug 1277796
Opened 9 years ago
Closed 9 years ago
Crash [@ js::jit::MSimdSplat::foldsTo] or Crash [@ js::jit::MConstant::toFloat32] or Assertion failure: in->type() == MIRType::Int32 (Boolean SIMD vector requires Int32 lanes.), at jit/TypePolicy.cpp:597 with SIMD
Categories
(Core :: JavaScript Engine, defect)
Tracking
()
RESOLVED
FIXED
mozilla50
People
(Reporter: decoder, Assigned: jolesen)
References
Details
(Keywords: crash, regression, testcase, Whiteboard: [fuzzblocker] [jsbugmon:update])
Crash Data
Attachments
(1 file)
The following testcase crashes on mozilla-central revision 22047a4eea78 (build with --enable-optimize --enable-posix-nspr-emulation --enable-valgrind --enable-gczeal --target=i686-pc-linux-gnu --disable-tests --disable-debug, run with --fuzzing-safe --ion-eager):
SIMD.Bool16x8()
while (true);
Backtrace:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xf666db40 (LWP 27785)]
js::jit::MSimdSplat::foldsTo (this=0xf7a8ebd8, alloc=...) at js/src/jit/MIR.cpp:1184
#0 js::jit::MSimdSplat::foldsTo (this=0xf7a8ebd8, alloc=...) at js/src/jit/MIR.cpp:1184
#1 0x083025fe in simplified (def=0xf7a8ebd8, this=0xf666d180) at js/src/jit/ValueNumbering.cpp:618
#2 js::jit::ValueNumberer::visitDefinition (this=0xf666d180, def=0xf7a8ebd8) at js/src/jit/ValueNumbering.cpp:777
#3 0x08302f95 in js::jit::ValueNumberer::visitBlock (this=this@entry=0xf666d180, block=block@entry=0xf7a8e688, dominatorRoot=dominatorRoot@entry=0xf7a8e688) at js/src/jit/ValueNumbering.cpp:987
#4 0x08303370 in js::jit::ValueNumberer::visitDominatorTree (this=this@entry=0xf666d180, dominatorRoot=dominatorRoot@entry=0xf7a8e688) at js/src/jit/ValueNumbering.cpp:1032
#5 0x08303430 in js::jit::ValueNumberer::visitGraph (this=0xf666d180) at js/src/jit/ValueNumbering.cpp:1070
#6 0x083034c5 in js::jit::ValueNumberer::run (this=this@entry=0xf666d180, updateAliasAnalysis=updateAliasAnalysis@entry=js::jit::ValueNumberer::UpdateAliasAnalysis) at js/src/jit/ValueNumbering.cpp:1241
#7 0x081f7f65 in js::jit::OptimizeMIR (mir=mir@entry=0xf7a8e138) at js/src/jit/Ion.cpp:1664
#8 0x081f8e90 in js::jit::CompileBackEnd (mir=mir@entry=0xf7a8e138) at js/src/jit/Ion.cpp:1988
#9 0x084a8bb3 in js::HelperThread::handleIonWorkload (this=this@entry=0xf7a18948) at js/src/vm/HelperThreads.cpp:1444
#10 0x084a9a54 in js::HelperThread::threadLoop (this=0xf7a18948) at js/src/vm/HelperThreads.cpp:1747
#11 0x084caaaf in nspr::Thread::ThreadRoutine (arg=0xf7a021e0) at js/src/vm/PosixNSPR.cpp:45
#12 0xf7fb8f59 in start_thread (arg=0xf666db40) at pthread_create.c:312
#13 0xf7d85c4e in clone () from /lib32/libc.so.6
eax 0x62 98
ebx 0x95242f8 156386040
ecx 0xf7a8ebd8 -139924520
edx 0xf7a8e010 -139927536
esi 0xf7a8eb90 -139924592
edi 0xf7a8ebd8 -139924520
ebp 0xf666cfb8 4133932984
esp 0xf666cee0 4133932768
eip 0x8254870 <js::jit::MSimdSplat::foldsTo(js::jit::TempAllocator&)+720>
=> 0x8254870 <js::jit::MSimdSplat::foldsTo(js::jit::TempAllocator&)+720>: movl $0x4a0,0x0
0x825487a <js::jit::MSimdSplat::foldsTo(js::jit::TempAllocator&)+730>: call 0x8096f40 <abort()>
This is fairly easy to trigger, marking as fuzzblocker.
Reporter | ||
Updated•9 years ago
|
Summary: Crash [@ js::jit::MSimdSplat::foldsTo] or Crash [@ js::jit::MConstant::toFloat32] with SIMD → Crash [@ js::jit::MSimdSplat::foldsTo] or Crash [@ js::jit::MConstant::toFloat32] or Assertion failure: in->type() == MIRType::Int32 (Boolean SIMD vector requires Int32 lanes.), at jit/TypePolicy.cpp:597 with SIMD
Updated•9 years ago
|
Whiteboard: [jsbugmon:update,bisect][fuzzblocker] → [fuzzblocker] [jsbugmon:update]
Comment 1•9 years ago
|
||
JSBugMon: Bisection requested, result:
=== Treeherder Build Bisection Results by autoBisect ===
The "good" changeset has the timestamp "20160531084741" and the hash "e5f0088f8ca2ebd070812488f4296e81ca111ad2".
The "bad" changeset has the timestamp "20160531090146" and the hash "c19c99878a6076e928690f45b37403b110cd5482".
Likely regression window: https://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=e5f0088f8ca2ebd070812488f4296e81ca111ad2&tochange=c19c99878a6076e928690f45b37403b110cd5482
Jakob, is bug 1136226 a likely regressor?
Flags: needinfo?(jolesen)
Assignee | ||
Comment 3•9 years ago
|
||
Yes, thanks. I'll take a look.
Assignee: nobody → jolesen
Flags: needinfo?(jolesen)
Assignee | ||
Comment 4•9 years ago
|
||
Add better test coverage of boolean SIMD constructors with insufficient
arguments.
Add better test coverage of 8x16 and 16x8 constructor calls with missing args.
Fix a crash caused by a missing bool-to-int conversion before a boolean splat
when inlining a boolean constructor.
Fix a crash in the foldsTo method for boolean splats. The 8x16 and 16x8 booleans
were not implemented.
Review commit: https://reviewboard.mozilla.org/r/57750/diff/#index_header
See other reviews: https://reviewboard.mozilla.org/r/57750/
Attachment #8760002 -
Flags: review?(bbouvier)
Updated•9 years ago
|
Attachment #8760002 -
Flags: review?(bbouvier) → review+
Comment 5•9 years ago
|
||
Comment on attachment 8760002 [details]
Bug 1277796 - Fix boolean SIMD constructors.
https://reviewboard.mozilla.org/r/57750/#review54714
Thanks for fixing this. I think the two lines in MCallOptimize.cpp should be removed; if they can't, we probably need a different change in this function.
::: js/src/jit/MCallOptimize.cpp:3464
(Diff revision 1)
> current->add(values);
> } else {
> // For general constructor calls, start from splat(defVal), insert one
> // lane at a time.
> + if (laneType == MIRType::Boolean)
> + defVal = constant(Int32Value(0));
Why is this needed? It seems defVal should already be assigned a constant Boolean value "false" when the laneType is MIRType::Boolean.
Assignee | ||
Comment 6•9 years ago
|
||
https://reviewboard.mozilla.org/r/57750/#review54714
> Why is this needed? It seems defVal should already be assigned a constant Boolean value "false" when the laneType is MIRType::Boolean.
The boolean splat and insertLane operators require an int32 input with the value 0 or -1.
Do you think this intention would be clearer with `defVal = convertToBooleanSimdLane(defVal)`? Both require some constant folding, which is ok, I think.
Comment 7•9 years ago
|
||
(In reply to Jakob Stoklund Olesen [:jolesen] from comment #6)
> https://reviewboard.mozilla.org/r/57750/#review54714
>
> > Why is this needed? It seems defVal should already be assigned a constant Boolean value "false" when the laneType is MIRType::Boolean.
>
> The boolean splat and insertLane operators require an int32 input with the
> value 0 or -1.
>
> Do you think this intention would be clearer with `defVal =
> convertToBooleanSimdLane(defVal)`? Both require some constant folding, which
> is ok, I think.
Okay, I've re-read the code and it is a bit messy, as defVal is used both in the SimdValueX4 branch *and* in the else branch. So doing what you suggest works fine; with a bit more tidying up, we could group the |for| loop in the case |lanes == 4| and convertToBooleanSimdLane iff |i < callinfo.argc()|; then we could create the proper defVal for boolean (-1 or 0) directly up there. Both work for me (i.e. r=me for either way).
Status: NEW → ASSIGNED
Assignee | ||
Comment 8•9 years ago
|
||
Comment on attachment 8760002 [details]
Bug 1277796 - Fix boolean SIMD constructors.
Review request updated; see interdiff: https://reviewboard.mozilla.org/r/57750/diff/1-2/
Pushed by jolesen@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/8f6ca5927195
Fix boolean SIMD constructors. r=bbouvier
Updated•9 years ago
|
Whiteboard: [fuzzblocker] [jsbugmon:update] → [fuzzblocker] [jsbugmon:update,ignore]
Comment 10•9 years ago
|
||
JSBugMon: The testcase found in this bug no longer reproduces (tried revision 7f7c7d24700e).
Comment 11•9 years ago
|
||
bugherder |
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
status-firefox50:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla50
![]() |
||
Updated•9 years ago
|
Whiteboard: [fuzzblocker] [jsbugmon:update,ignore] → [fuzzblocker] [jsbugmon:update]
Comment 12•9 years ago
|
||
Looks like this also definitely affects 49, but the patch here missed the merge cutoff. Can you request uplift to aurora? Thanks.
Flags: needinfo?(jolesen)
Assignee | ||
Comment 13•9 years ago
|
||
SIMD is still only enabled in nightly builds, so I don't think this is necessary to merge.
Flags: needinfo?(jolesen)
Updated•9 years ago
|
You need to log in
before you can comment on or make changes to this bug.
Description
•