Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Updating emitInsCanOnlyWriteSSE2OrAVXReg to cover some of the newer instructions. #19141

Merged
merged 1 commit into from
Jul 27, 2018
Merged

Updating emitInsCanOnlyWriteSSE2OrAVXReg to cover some of the newer instructions. #19141

merged 1 commit into from
Jul 27, 2018

Conversation

tannergooding
Copy link
Member

@tannergooding
Copy link
Member Author

Rebased onto head now that #19130 has been merged.

@tannergooding
Copy link
Member Author

@dotnet-bot test Windows_NT x64 Checked jitincompletehwintrinsic
@dotnet-bot test Windows_NT x64 Checked jitx86hwintrinsicnoavx
@dotnet-bot test Windows_NT x64 Checked jitx86hwintrinsicnoavx2
@dotnet-bot test Windows_NT x64 Checked jitx86hwintrinsicnosimd
@dotnet-bot test Windows_NT x64 Checked jitnox86hwintrinsic

@dotnet-bot test Windows_NT x86 Checked jitincompletehwintrinsic
@dotnet-bot test Windows_NT x86 Checked jitx86hwintrinsicnoavx
@dotnet-bot test Windows_NT x86 Checked jitx86hwintrinsicnoavx2
@dotnet-bot test Windows_NT x86 Checked jitx86hwintrinsicnosimd
@dotnet-bot test Windows_NT x86 Checked jitnox86hwintrinsic

@dotnet-bot test Ubuntu x64 Checked jitincompletehwintrinsic
@dotnet-bot test Ubuntu x64 Checked jitx86hwintrinsicnoavx
@dotnet-bot test Ubuntu x64 Checked jitx86hwintrinsicnoavx2
@dotnet-bot test Ubuntu x64 Checked jitx86hwintrinsicnosimd
@dotnet-bot test Ubuntu x64 Checked jitnox86hwintrinsic

@tannergooding
Copy link
Member Author

@dotnet-bot test Ubuntu x64 Checked gcstress0xc
@dotnet-bot test Ubuntu x64 Checked gcstress0xc_minopts_heapverify1

@dotnet-bot test Windows_NT x64 Checked gcstress0xc
@dotnet-bot test Windows_NT x64 Checked gcstress0xc_minopts_heapverify1

@tannergooding
Copy link
Member Author

CC. @AndyAyersMS, @CarolEidt, @fiigii

{
return false;
}

return true;
switch (ins)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New entries are:

case INS_andn:
case INS_blsi:
case INS_blsmsk:
case INS_blsr:
case INS_movmskpd:
case INS_movmskps:
case INS_pdep:
case INS_pext:
case INS_pextrw_sse41:

@@ -10099,6 +10127,8 @@ BYTE* emitter::emitOutputAM(BYTE* dst, instrDesc* id, code_t code, CnsVal* addc)
switch (id->idInsFmt())
{
case IF_RWR_ARD:
case IF_RRW_ARD:
case IF_RWR_RRD_ARD:
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't actually getting GCStress failures for the RWR_RRD_ARD (as well as the corresponding SRD, MRD, and RRD) entries... However, we are definitely executing SIMD instructions that write integer registers and that use those formats....

Anyone know if there is something I'm missing here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You may just be getting (un)lucky, as the written registers won't always contain GC refs.

@tannergooding
Copy link
Member Author

tannergooding commented Jul 26, 2018

As a general comment, when reviewing I saw at least a couple IF_* entries that didn't make much sense (such as IF_RRW_RRW_CNS)... We should probably audit the instructions and the formats they get mapped to in order so we can validate they are accurate.

@tannergooding
Copy link
Member Author

@CarolEidt, @AndyAyersMS do either of you have any concerns with merging this?

  • The Win x64 HeapVerify/GCStress job timed out, everything passes locally.
  • The OSX10.12 failure is in Avx_ro, but is unrelated to this change (still investigating locally).
  • The Ubuntu GCStress jobs have been running for 17 hours now (and are still going, they don't appear to be stalled)

Copy link

@CarolEidt CarolEidt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@CarolEidt
Copy link

Added a note to #14523 about this.

Copy link
Member

@AndyAyersMS AndyAyersMS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM too.

I think you can use jit-diffs to check for GC reporting diffs (though it might require manual file diffing).

Might be interesting to see if anything turns up from this outside of methods that use these HW intrinsics.

@tannergooding
Copy link
Member Author

Might be interesting to see if anything turns up from this outside of methods that use these HW intrinsics.

Good idea, will check this before merging.

@tannergooding
Copy link
Member Author

corelib reported 0 diffs. Test diffs are still running.

@tannergooding
Copy link
Member Author

Only Bmi1 reported diffs, and only for the gcinfo portion.

@tannergooding tannergooding merged commit e59139e into dotnet:master Jul 27, 2018
@AndyAyersMS
Copy link
Member

Thanks for checking. That explains why you didn't see other stress failures ...

@tannergooding
Copy link
Member Author

That explains why you didn't see other stress failures .

Right. They must be getting updated somewhere else, and I missed it somewhere. (I know RRW_RRW_RRD was handle explicitly after the emitOutputRR call, for example).

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants