dneilson (Daniel Neilson)
Software Engineer

Projects

User does not belong to any projects.

User Details

User Since
Apr 26 2017, 6:42 AM (8 w, 3 d)

Previously worked with IBM for 3.5 years on the optimizer for the XL Compiler on p-Series hardware; notably, I was heavily involved in implementing support for OpenMP 4.x GPU offloading.

Currently at Azul Systems working on the LLVM-based JIT in the Zing JVM.

Recent Activity

Fri, Jun 16

dneilson committed rL305558: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
[Atomics] Rename and change prototype for atomic memcpy intrinsic
Fri, Jun 16, 7:45 AM
dneilson closed D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic by committing rL305558: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
Fri, Jun 16, 7:44 AM
dneilson updated the diff for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
  • rebase
Fri, Jun 16, 7:07 AM

Mon, Jun 12

dneilson committed rL305189: Const correctness for TTI::getRegisterBitWidth.
Const correctness for TTI::getRegisterBitWidth
Mon, Jun 12, 7:23 AM
dneilson closed D33903: Const correctness for TTI::getRegisterBitWidth by committing rL305189: Const correctness for TTI::getRegisterBitWidth.
Mon, Jun 12, 7:22 AM

Thu, Jun 8

dneilson added inline comments to D33756: [RS4GC] Drop invalid metadata after pointers are relocated.
Thu, Jun 8, 8:40 AM
dneilson added a comment to D34025: [SCEV] Teach SCEVExpander to expand BinPow.

Have you looked at what happens with addition? i.e.

Thu, Jun 8, 7:35 AM

Wed, Jun 7

dneilson added inline comments to D33756: [RS4GC] Drop invalid metadata after pointers are relocated.
Wed, Jun 7, 8:54 AM
dneilson added inline comments to D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
Wed, Jun 7, 7:57 AM

Tue, Jun 6

dneilson updated the diff for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
  • Loop idiom patch was dropped, so update loop idiom recognition as well.
Tue, Jun 6, 1:03 PM
dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Default max element size to 0
Tue, Jun 6, 7:45 AM
dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
Tue, Jun 6, 6:31 AM
dneilson added inline comments to D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
Tue, Jun 6, 6:29 AM

Mon, Jun 5

dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Abstract the max element size for atomic memory intrinsics into the TTI.
Mon, Jun 5, 1:34 PM
dneilson added a comment to D33903: Const correctness for TTI::getRegisterBitWidth.

Please note that I do not have commit access, yet. So, if this looks good then please upstream.

Mon, Jun 5, 11:27 AM
dneilson created D33903: Const correctness for TTI::getRegisterBitWidth.
Mon, Jun 5, 11:26 AM

Thu, Jun 1

dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
Thu, Jun 1, 7:55 AM

Wed, May 31

dneilson updated the diff for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
  • Remove volatile arg from intrinsic.
  • Add check to verifier to ensure that constant length is a multiple of element size & add corresponding test.
Wed, May 31, 2:33 PM
dneilson added inline comments to D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
Wed, May 31, 12:29 PM
dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
Wed, May 31, 12:23 PM
dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Remove use of RTLIB in loop idiom. Results in a circular dependence in libs, so we can't use it there. Instead of querying RTLIB for allowable store sizes, we query the scalar register bit width from TTI.
Wed, May 31, 12:16 PM
dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Rebase to ToT.
  • clang-format (no-op)
Wed, May 31, 8:35 AM
dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
Wed, May 31, 8:07 AM

Mon, May 29

dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Adding tests to check permutations of alignment validity.
  • Adding tests for element sizes beyond 1 byte.
  • Clarify some conditional rejections in isLegalStore()
Mon, May 29, 9:32 AM
dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
Mon, May 29, 7:23 AM

Fri, May 26

dneilson added a comment to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
In D33243#765659, @anna wrote:
  • Remove dependence on D33240 by expanding to the current, existing, form of atomic.memcpy.

Do you mean the intrinsic that was already added? If so, could you please run make check all to confirm that all tests pass.

Fri, May 26, 11:01 AM
dneilson updated the diff for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
  • Another iteration on the intrinsic prototype. I've removed the align, and dest/src_unordered arguments.
    • Having align both as arg attributes and as an arg could cause challenges if we need to resolve a difference, and it is the desired future direction for intrinsics.
    • Upon further thought, and digging into where passes would have to be made aware of this intrinsic -- I'm no longer convinced about the value of the separate dest_unordered/src_unordered args.
      • It seems sufficient to have the semantics of the intrinsic being that all loads/stores are unordered atomic; we can still "promote" idioms that mix, say, unordered loads with simple stores.
      • Any library implementation will just use unordered atomic loads & stores throughout, anyways.
      • There will be a side-effect of promoting simple ops to unordered-atomic if we recognize a loop idiom, and then later lower it into loads/stores. The tradeoff is that it should be easier to work with the intrinsic in passes.
      • The only value that I can see in having the separate dest_unordered/src_unordered args is that in lowering passes that change the intrinsic into explicit loads/stores we wouldn't "promote" a simple op into an unordered-atomic op.
Fri, May 26, 8:44 AM
dneilson added a comment to D33355: [IR] Add additional addParamAttr/removeParamAttr to AttributeList API.

ping -- To the reviewers: is this good-to-go as-is? If so, can someone please approve and push upstream (I do not have commit access).

Fri, May 26, 6:06 AM

May 25 2017

dneilson removed a dependency for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy: D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
May 25 2017, 9:39 AM
dneilson removed a dependent revision for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic: D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
May 25 2017, 9:39 AM
dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Remove dependence on D33240 by expanding to the current, existing, form of atomic.memcpy.
May 25 2017, 9:39 AM

May 24 2017

dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Refining logic regarding which store sizes to allow for the unordered atomic memcpy.
  • Add some additional tests -- simple loads/stores with no alignment, and memset_pattern
May 24 2017, 7:45 AM
dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
May 24 2017, 7:42 AM
dneilson updated the diff for D33355: [IR] Add additional addParamAttr/removeParamAttr to AttributeList API.

rnk comments + rebase

May 24 2017, 7:14 AM

May 23 2017

dneilson updated the diff for D33355: [IR] Add additional addParamAttr/removeParamAttr to AttributeList API.

Addressing comments:

  • Removed the addAttribute(Ctx, Indices, Attribute) method from AttributeList, and replaces with one that operates on a single Index instead of a list.
  • Cleaned up the wording on all of the add/remove attribute comments referring to return values being immutable
May 23 2017, 11:45 AM
dneilson added inline comments to D33355: [IR] Add additional addParamAttr/removeParamAttr to AttributeList API.
May 23 2017, 10:46 AM
dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
May 23 2017, 8:01 AM
dneilson added inline comments to D33355: [IR] Add additional addParamAttr/removeParamAttr to AttributeList API.
May 23 2017, 7:04 AM

May 19 2017

dneilson updated the diff for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.

Addressing some comments -- use of getters, adding assertions to setters, and some minor wording changes to LangRef.

May 19 2017, 1:27 PM
dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.

Addressing most concerns.

May 19 2017, 12:15 PM
dneilson updated the summary of D33355: [IR] Add additional addParamAttr/removeParamAttr to AttributeList API.
May 19 2017, 11:46 AM
dneilson updated the diff for D33355: [IR] Add additional addParamAttr/removeParamAttr to AttributeList API.

clang-formatting patch

May 19 2017, 11:37 AM
dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
May 19 2017, 11:03 AM
dneilson added a comment to D33359: [LoopIdiom] Refactor return value of LoopIdiomRecognize::isLegalStore.

Thanks. Can someone please upstream this? I do not have commit access.

May 19 2017, 9:48 AM
dneilson created D33359: [LoopIdiom] Refactor return value of LoopIdiomRecognize::isLegalStore.
May 19 2017, 9:26 AM
dneilson created D33355: [IR] Add additional addParamAttr/removeParamAttr to AttributeList API.
May 19 2017, 6:59 AM

May 18 2017

dneilson updated subscribers of D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
May 18 2017, 1:00 PM
dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Address functional issue re: don't want to accidentally flag unordered atomic stores as okay for memset & memset_pattern.
  • Add test case to verify functional issue is non-issue.
  • Add align attribute to the pointer args on the generated intrinsic call.
May 18 2017, 11:58 AM
dneilson updated the diff for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.

Addressing suggestions.

May 18 2017, 11:45 AM

May 17 2017

dneilson added inline comments to D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
May 17 2017, 1:24 PM
dneilson added inline comments to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
May 17 2017, 8:35 AM
dneilson added a comment to D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.

I'm pretty sure this patch is buggy in a fairly major way. isLegalStore is a helper function used when matching three types of intrinsics: memset, memcpy, and memset_patternN. It looks like you're accidentally matching unorder atomics in all three idioms without the corresponding intrinsic support. At minimum, I'd want test cases showing these transforms *not* triggering.

I suspect that the code would become much cleaner if you restructured isLegalStore to return an enum of *which* intrinsic it was a legal store for. This could be a preparatory patch before this one to make it easier to reason about.

May 17 2017, 8:30 AM

May 16 2017

dneilson updated the diff for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
  • Updating to reflect changes in prerequisite change.
  • Moved CHECKs in test case to start of procs.
May 16 2017, 2:37 PM
dneilson updated the diff for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
  • Addressed suggested changes to the LangRef doc for the intrinsic.
  • Split out the is unordered parameter into two separate parameters -- dest_unordered & src_unordered.
May 16 2017, 2:32 PM
dneilson added a comment to D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.

I'll make the suggested changes to the LangRef.

May 16 2017, 12:11 PM
dneilson added a comment to D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.

Do we get any practical benefit from separately specifying whether the source and destination require unordered operations?

May 16 2017, 12:06 PM
dneilson added a dependent revision for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic: D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
May 16 2017, 11:20 AM
dneilson added a dependency for D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy: D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
May 16 2017, 11:20 AM
dneilson added a reviewer for D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic: efriedma.
May 16 2017, 9:33 AM
dneilson created D33243: [Atomics][LoopIdiom] Recognize unordered atomic memcpy.
May 16 2017, 9:20 AM
dneilson added a comment to D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.

Note that this is the first of a series of patches that are being developed for the unordered atomic memcpy. Minimally, the plan is to push the following changes one at a time to minimize risk and impact on others:
i. Change intrinsic name, prototype (to match memcpy closely), & documentation.
ii. Add code to loop idiom to recognize the element unordered atomic memcpy.
iii. Add code to instcombine & selection dag builder to lower the intrinsic.
iv. Add an isunordered() to the MemIntrinsic introspection class (returning false for all existing intrinsics), and add calls to it to all passes it's relevant.
v. Add intrinsic into the introspection hierarchy & complete support for new intrinsic in passes.

May 16 2017, 7:37 AM
dneilson created D33240: [Atomics] Rename and change prototype for atomic memcpy intrinsic.
May 16 2017, 7:34 AM

May 8 2017

dneilson added inline comments to D32536: Extend memcpy expansion in Transform/Utils to handle wider operand types..
May 8 2017, 6:45 AM