dneilson (Daniel Neilson)
Software Engineer

Projects

User does not belong to any projects.

User Details

User Since
Apr 26 2017, 6:42 AM (32 w, 5 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, Dec 1

dneilson added inline comments to D40613: [LoopIdiom] Recognize unordered atomic memset.
Fri, Dec 1, 11:25 AM
dneilson updated the diff for D40613: [LoopIdiom] Recognize unordered atomic memset.
  • Addressing review comments.
Fri, Dec 1, 7:58 AM
dneilson added inline comments to D40613: [LoopIdiom] Recognize unordered atomic memset.
Fri, Dec 1, 7:40 AM

Wed, Nov 29

dneilson created D40613: [LoopIdiom] Recognize unordered atomic memset.
Wed, Nov 29, 10:24 AM

Nov 10 2017

dneilson committed rL317918: Expand IRBuilder interface for atomic memcpy to require pointer alignments..
Expand IRBuilder interface for atomic memcpy to require pointer alignments.
Nov 10 2017, 11:38 AM

Nov 2 2017

dneilson accepted D39388: [RS4GC] Strip off invariant.start because memory locations arent invariant.
Nov 2 2017, 8:55 AM
dneilson added a comment to D39388: [RS4GC] Strip off invariant.start because memory locations arent invariant.

LGTM

Nov 2 2017, 8:55 AM

Nov 1 2017

dneilson added inline comments to D39388: [RS4GC] Strip off invariant.start because memory locations arent invariant.
Nov 1 2017, 10:18 AM

Oct 31 2017

dneilson added a comment to D39388: [RS4GC] Strip off invariant.start because memory locations arent invariant.

Is is possible to also remove the corresponding invariant.end calls to the removed invariant.start calls? This patch will leave orphaned calls to invariant.end sitting around in the IR that have no corresponding start.

Oct 31 2017, 8:16 AM

Oct 30 2017

dneilson committed rL316950: Create instruction classes for identifying any atomicity of memory intrinsic..
Create instruction classes for identifying any atomicity of memory intrinsic.
Oct 30 2017, 12:52 PM
dneilson closed D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC) by committing rL316950: Create instruction classes for identifying any atomicity of memory intrinsic..
Oct 30 2017, 12:52 PM

Oct 26 2017

dneilson updated the diff for D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).
  • Missed a comment regarding why we use CRTP for the MemIntrinsicBase class.
Oct 26 2017, 11:46 AM
dneilson updated the diff for D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).
  • Address minor nits.
  • Clang-formatting change.
Oct 26 2017, 11:42 AM
dneilson updated the diff for D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).
  • Rebase.
  • Fixing cut & paste errors in comments.
  • Remove isVolatile() method from the atomic memory intrinsic hierarchy.
  • Change MemInstrinsicBase to use CRTP.
  • Remove inline keyword from classof() method declarations.
Oct 26 2017, 9:38 AM
dneilson added a comment to D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).

Just to be clear, at the isa<>, dyn_cast<> level, this is the hierarchy you're shooting for right:

digraph G {
	AnyMemI -> MemI
	AnyMemI -> AtomicMemI
	AnyMemI -> AnyMemSetI
	AnyMemI -> AnyMemTransferI

	AnyMemSetI -> MemSetI
	AnyMemSetI -> AtomicMemSetI

	AnyMemTransferI -> AtomicMemTransferI
	AnyMemTransferI -> MemTransferI
	AnyMemTransferI -> AnyMemCpyI
	AnyMemTransferI -> AnyMemMoveI

	AtomicMemTransferI -> AtomicMemcpyI
	AtomicMemTransferI -> AtomicMemMoveI

	MemTransferI -> MemcpyI
	MemTransferI -> MemMoveI

	AnyMemCpyI -> MemcpyI
	AnyMemCpyI -> AtomicMemcpyI

	AnyMemMoveI -> MemMoveI
	AnyMemMoveI -> AtomicMemMoveI

	MemI -> MemTransferI
	MemI -> MemMoveI

	AtomicMemI -> AtomicMemTransferI
	AtomicMemI -> AtomicMemMoveI
}
Oct 26 2017, 9:36 AM

Oct 25 2017

dneilson retitled D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC) from Create instruction classes for identifying any atomicity of memory intrinsic. to Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).
Oct 25 2017, 1:27 PM
dneilson updated the diff for D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).
  • Rebasing.
  • Removing change to AliasSetTracker; this makes this change purely NFC.
Oct 25 2017, 1:26 PM

Oct 23 2017

dneilson added a comment to D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).

ping - Review still requested/needed. It may look daunting, but the change is pretty simple.

Oct 23 2017, 6:51 AM

Oct 13 2017

dneilson added a comment to D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).

ping - Could someone please take a look at this? Thank you.

Oct 13 2017, 2:23 PM
dneilson committed rL315694: [RS4GC] Look through vector bitcasts when looking for base pointer.
[RS4GC] Look through vector bitcasts when looking for base pointer
Oct 13 2017, 8:59 AM
dneilson closed D38849: [RS4GC] Look through vector bitcasts when looking for base pointer by committing rL315694: [RS4GC] Look through vector bitcasts when looking for base pointer.
Oct 13 2017, 8:59 AM
dneilson updated the diff for D38849: [RS4GC] Look through vector bitcasts when looking for base pointer.

Simplify test case

Oct 13 2017, 7:07 AM

Oct 12 2017

dneilson created D38849: [RS4GC] Look through vector bitcasts when looking for base pointer.
Oct 12 2017, 9:14 AM

Oct 11 2017

dneilson committed rL315491: [SCEV] Properly handle the case of a non-constant start with a zero accum in….
[SCEV] Properly handle the case of a non-constant start with a zero accum in…
Oct 11 2017, 12:05 PM
dneilson closed D38814: [SCEV] Properly handle the case of a non-constant start with a zero accum in ScalarEvolution::createAddRecFromPHIWithCastsImpl by committing rL315491: [SCEV] Properly handle the case of a non-constant start with a zero accum in….
Oct 11 2017, 12:05 PM
dneilson created D38814: [SCEV] Properly handle the case of a non-constant start with a zero accum in ScalarEvolution::createAddRecFromPHIWithCastsImpl.
Oct 11 2017, 11:24 AM

Oct 10 2017

dneilson added reviewers for D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC): apilipenko, anna, skatkov, mkazantsev.
Oct 10 2017, 1:44 PM

Oct 4 2017

dneilson added a comment to D38481: Use sched_getaffinity instead of std::thread::hardware_concurrency when available.

Reverted: https://reviews.llvm.org/rL314922

Oct 4 2017, 11:21 AM
dneilson committed rL314922: Revert D38481 due to missing cmake check for CPU_COUNT.
Revert D38481 due to missing cmake check for CPU_COUNT
Oct 4 2017, 11:20 AM

Oct 3 2017

dneilson retitled D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC) from Rename instruction classes for memory intrinsics. (NFC) to Create instruction classes for identifying any atomicity of memory intrinsic..
Oct 3 2017, 11:11 AM
dneilson updated the diff for D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).

Flush out the hierarchy, and do not rename the classes for the non-atomic memory intrinsics.

Oct 3 2017, 11:10 AM

Sep 29 2017

dneilson added a comment to D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).

Pulling this, for now. I'm going to make sure that the joint part of the hierarchy (i.e. the AnyMem* classes) will work before trying to land this part.

FWIW, I don't really like the PainMem* names, although the AtomicMem* looks like an improvement. Can't you just leave the plain ones alone?

I have no particular objection to leaving the plain ones as is. It's what I suggested: http://lists.llvm.org/pipermail/llvm-dev/2017-August/116716.html

A counter suggestion, that wasn't challenged, was made to change the plain ones as well: http://lists.llvm.org/pipermail/llvm-dev/2017-August/116722.html

Fair enough. I challenge :-) -- Sanjoy's comment about silent failures downstream is legitimate, but given how new the atomic versions of these are, I don't think that I'm concerned (and it will fail in the right way: by not recognizing the atomic forms, which is what any current code is probably intended to do (because it was written before the atomic forms existed)).

Sep 29 2017, 1:25 PM
dneilson added a comment to D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).

Pulling this, for now. I'm going to make sure that the joint part of the hierarchy (i.e. the AnyMem* classes) will work before trying to land this part.

FWIW, I don't really like the PainMem* names, although the AtomicMem* looks like an improvement. Can't you just leave the plain ones alone?

Sep 29 2017, 1:02 PM
dneilson abandoned D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).

Pulling this, for now. I'm going to make sure that the joint part of the hierarchy (i.e. the AnyMem* classes) will work before trying to land this part.

Sep 29 2017, 12:29 PM
dneilson created D38419: Create instruction classes for identifying any atomicity of memory intrinsic. (NFC).
Sep 29 2017, 12:24 PM

Sep 22 2017

dneilson added a comment to D38097: [IVUsers] Changes to make IVUsers's results robust to instruction and uselist ordering.

So, TL;DR, i'm not sure how much you really care, this isn't going to make your ordering completely consistent in the face of use list reordering or instruction ordering. It should work if there is a single cycle, but not if there are nested cycles.

Is there a reason not to use a complete solution, which would be "form sccs of ssa graph, sort them if necessary, perform whatever filtering you want".

Forming scc's guarantees you have all instructions that you could ever want to process.
You can then sort the SCC's by dominance order (DT dfs numbers, then local dfs numbers) if you don't like the ordering it produces, and process.

That will guarantee completely consistent ordering, as tarjan scc's are maximal.

(This will have the same time bound as the current DFS based solution)

Sep 22 2017, 9:25 AM
dneilson committed rL313988: [SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc….
[SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc…
Sep 22 2017, 8:49 AM
dneilson closed D37888: [SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc(x)+n*trunc(y) by committing rL313988: [SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc….
Sep 22 2017, 8:49 AM
dneilson added a comment to D38097: [IVUsers] Changes to make IVUsers's results robust to instruction and uselist ordering.

Any performance changes in the test suite?

You can run LLVM's test suite using LNT by following the directions here: http://llvm.org/docs/lnt/quickstart.html

Sep 22 2017, 7:25 AM

Sep 21 2017

dneilson updated the diff for D37888: [SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc(x)+n*trunc(y).

Remove the loop from the lambda.

Sep 21 2017, 12:08 PM

Sep 20 2017

dneilson added a comment to D38097: [IVUsers] Changes to make IVUsers's results robust to instruction and uselist ordering.

Any performance changes in the test suite?

Sep 20 2017, 1:53 PM
dneilson created D38097: [IVUsers] Changes to make IVUsers's results robust to instruction and uselist ordering.
Sep 20 2017, 1:46 PM
dneilson updated the diff for D37888: [SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc(x)+n*trunc(y).

Rewrite lambda to exploit SCEV operand ordering.

Sep 20 2017, 12:06 PM
dneilson added inline comments to D37888: [SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc(x)+n*trunc(y).
Sep 20 2017, 10:48 AM
dneilson updated the diff for D37888: [SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc(x)+n*trunc(y).

Minor rearrangement of the patch to get srctype from the lambda instead of a trunc.
( Sorry for the delay; I was out of town & away from computers. )

Sep 20 2017, 9:28 AM

Sep 14 2017

dneilson created D37888: [SCEV] Generalize folding of trunc(x)+n*trunc(y) into folding m*trunc(x)+n*trunc(y).
Sep 14 2017, 9:06 PM

Sep 5 2017

dneilson updated subscribers of D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.

A couple of quick notes:

Sep 5 2017, 1:00 PM
dneilson committed rL312568: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly….
[SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly…
Sep 5 2017, 12:55 PM
dneilson closed D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values by committing rL312568: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly….
Sep 5 2017, 12:55 PM

Sep 1 2017

dneilson updated the diff for D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.

Address minor nicks. Change test from a LIT test to a unittest.

Sep 1 2017, 10:02 AM
dneilson updated the summary of D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.
Sep 1 2017, 9:29 AM
dneilson added inline comments to D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.
Sep 1 2017, 9:22 AM

Aug 31 2017

dneilson updated the diff for D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.

Addressing some reviewer comments.

Aug 31 2017, 9:36 AM
dneilson added inline comments to D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.
Aug 31 2017, 7:37 AM
dneilson added inline comments to D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.
Aug 31 2017, 7:33 AM

Aug 29 2017

dneilson added a comment to D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.

Note: I'm not sure how resource management works in SCEV. There are some SCEVs being created here before the bail-out (return None) that are not explicitly deleted. Do we need to delete these, or is there some sort of SCEV resource management thing going on under the hood?

Aug 29 2017, 10:08 AM
dneilson created D37265: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl properly handles out of range truncations of the start and accum values.
Aug 29 2017, 10:04 AM
dneilson abandoned D37227: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl is working with an add expression..
Aug 29 2017, 6:27 AM

Aug 28 2017

dneilson added a comment to D37227: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl is working with an add expression..

Got some more info... changing the xor into an add in the test also results in the same assert firing. So, more digging needed.

Aug 28 2017, 2:31 PM
dneilson updated the summary of D37227: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl is working with an add expression..
Aug 28 2017, 2:11 PM
dneilson added inline comments to D37227: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl is working with an add expression..
Aug 28 2017, 1:40 PM
dneilson updated the diff for D37227: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl is working with an add expression..
  • Add 'RUN' line to test.
Aug 28 2017, 12:10 PM
dneilson created D37227: [SCEV] Ensure ScalarEvolution::createAddRecFromPHIWithCastsImpl is working with an add expression..
Aug 28 2017, 11:53 AM

Aug 17 2017

dneilson added a comment to D35511: Add element-atomic mem intrinsic canary tests for Thread Sanitizer..

ping

Aug 17 2017, 10:54 AM
dneilson abandoned D34883: Check for MemIntrinsic::isElementAtomic() in InstCombine.

Closing. Discussion & path forward will be decided in the RFC discussion hanging off of http://lists.llvm.org/pipermail/llvm-dev/2017-August/116589.html

Aug 17 2017, 8:35 AM
dneilson abandoned D34629: Add isElementAtomic query method to MemInstrinsic class..

Closing. Discussion & path forward will be decided in the RFC discussion hanging off of http://lists.llvm.org/pipermail/llvm-dev/2017-August/116589.html

Aug 17 2017, 8:35 AM

Jul 27 2017

dneilson committed rL309291: All libcalls should be considered to be GC-leaf functions..
All libcalls should be considered to be GC-leaf functions.
Jul 27 2017, 9:50 AM
dneilson closed D35840: All libcalls should be considered to be GC-leaf functions. by committing rL309291: All libcalls should be considered to be GC-leaf functions..
Jul 27 2017, 9:50 AM
dneilson added a comment to D35840: All libcalls should be considered to be GC-leaf functions..
In D35840#822809, @anna wrote:

This change looks good to me. However, I would suggest separating out the PlaceSafepoints (and it's testcase) change from the RewriteStatepointsForGC change. We don't use placeSafepoint anymore, so we should perhaps just deprecate it upstream, instead of fixing it.
@reames: What do you suggest?

Jul 27 2017, 8:27 AM

Jul 25 2017

dneilson updated the diff for D35840: All libcalls should be considered to be GC-leaf functions..

clang-format patch

Jul 25 2017, 7:44 AM
dneilson created D35840: All libcalls should be considered to be GC-leaf functions..
Jul 25 2017, 7:39 AM

Jul 18 2017

dneilson added a comment to D35522: Move Runtime libcall definitions to a .def file.

This looks good to me -- very clean. I'm quite new to LLVM, so I don't feel comfortable giving this a go-ahead; I'll leave that to someone more experienced.

Jul 18 2017, 9:14 AM

Jul 17 2017

dneilson committed rL308250: Add element-atomic mem intrinsic canary tests for Efficiency Sanitizer..
Add element-atomic mem intrinsic canary tests for Efficiency Sanitizer.
Jul 17 2017, 6:07 PM
dneilson committed rL308251: Add element-atomic mem intrinsic canary tests for Memory Sanitizer..
Add element-atomic mem intrinsic canary tests for Memory Sanitizer.
Jul 17 2017, 6:07 PM
dneilson closed D35510: Add element-atomic mem intrinsic canary tests for Memory Sanitizer. by committing rL308251: Add element-atomic mem intrinsic canary tests for Memory Sanitizer..
Jul 17 2017, 6:07 PM
dneilson closed D35508: Add element-atomic mem intrinsic canary tests for Efficiency Sanitizer. by committing rL308250: Add element-atomic mem intrinsic canary tests for Efficiency Sanitizer..
Jul 17 2017, 6:07 PM
dneilson committed rL308249: Add element-atomic mem intrinsic canary tests for Dataflow Sanitizer..
Add element-atomic mem intrinsic canary tests for Dataflow Sanitizer.
Jul 17 2017, 6:07 PM
dneilson committed rL308248: Add element-atomic mem intrinsic canary tests for Address Sanitizer..
Add element-atomic mem intrinsic canary tests for Address Sanitizer.
Jul 17 2017, 6:07 PM
dneilson closed D35507: Add element-atomic mem intrinsic canary tests for Dataflow Sanitizer. by committing rL308249: Add element-atomic mem intrinsic canary tests for Dataflow Sanitizer..
Jul 17 2017, 6:07 PM
dneilson committed rL308247: Add element-atomic mem intrinsic canary tests for InstCombine..
Add element-atomic mem intrinsic canary tests for InstCombine.
Jul 17 2017, 6:07 PM
dneilson closed D35505: Add element-atomic mem intrinsic canary tests for Address Sanitizer. by committing rL308248: Add element-atomic mem intrinsic canary tests for Address Sanitizer..
Jul 17 2017, 6:07 PM
dneilson closed D35502: Add element-atomic mem intrinsic canary tests for InstCombine. by committing rL308247: Add element-atomic mem intrinsic canary tests for InstCombine..
Jul 17 2017, 6:07 PM
dneilson created D35511: Add element-atomic mem intrinsic canary tests for Thread Sanitizer..
Jul 17 2017, 2:33 PM
dneilson created D35510: Add element-atomic mem intrinsic canary tests for Memory Sanitizer..
Jul 17 2017, 2:31 PM
dneilson updated the summary of D35507: Add element-atomic mem intrinsic canary tests for Dataflow Sanitizer..
Jul 17 2017, 2:28 PM
dneilson created D35508: Add element-atomic mem intrinsic canary tests for Efficiency Sanitizer..
Jul 17 2017, 2:16 PM
dneilson created D35507: Add element-atomic mem intrinsic canary tests for Dataflow Sanitizer..
Jul 17 2017, 2:10 PM
dneilson created D35505: Add element-atomic mem intrinsic canary tests for Address Sanitizer..
Jul 17 2017, 2:03 PM
dneilson updated the diff for D35502: Add element-atomic mem intrinsic canary tests for InstCombine..

Header comment was ambiguous about memcpy/memmove being element atomic forms.

Jul 17 2017, 1:57 PM
dneilson updated the summary of D35502: Add element-atomic mem intrinsic canary tests for InstCombine..
Jul 17 2017, 1:55 PM
dneilson updated the diff for D35502: Add element-atomic mem intrinsic canary tests for InstCombine..

Refactor tests to make intent clearer.

Jul 17 2017, 1:46 PM
dneilson updated the summary of D35502: Add element-atomic mem intrinsic canary tests for InstCombine..
Jul 17 2017, 1:29 PM
dneilson created D35502: Add element-atomic mem intrinsic canary tests for InstCombine..
Jul 17 2017, 1:16 PM

Jul 12 2017

dneilson committed rL307854: Add element atomic memset intrinsic.
Add element atomic memset intrinsic
Jul 12 2017, 2:58 PM
dneilson closed D34885: Add element atomic memset intrinsic by committing rL307854: Add element atomic memset intrinsic.
Jul 12 2017, 2:57 PM
dneilson updated the diff for D34885: Add element atomic memset intrinsic.
  • rebase
  • add entries to WebAssembly runtime lib lists due to change in RTLIB::Libcall enum.
Jul 12 2017, 2:27 PM
dneilson committed rL307831: Fix to web assembly lib call list.
Fix to web assembly lib call list
Jul 12 2017, 12:24 PM
dneilson committed rL307796: Add element atomic memmove intrinsic.
Add element atomic memmove intrinsic
Jul 12 2017, 8:26 AM
dneilson closed D34884: Add element atomic memmove intrinsic by committing rL307796: Add element atomic memmove intrinsic.
Jul 12 2017, 8:26 AM

Jul 5 2017

dneilson added a comment to D34885: Add element atomic memset intrinsic.

I'm also a little skeptical this is a good idea; the "obvious" intrinsic to provide is one where the size of the value is equal to the atomic element size. The only reason to prefer this version is to slightly reduce the amount of work required to port existing transforms, and that doesn't seem compelling.

Jul 5 2017, 11:18 AM