dneilson (Daniel Neilson)
Software Engineer

Projects

User does not belong to any projects.

User Details

User Since
Apr 26 2017, 6:42 AM (24 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, Oct 13

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

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

Fri, Oct 13, 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
Fri, Oct 13, 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.
Fri, Oct 13, 8:59 AM
dneilson updated the diff for D38849: [RS4GC] Look through vector bitcasts when looking for base pointer.

Simplify test case

Fri, Oct 13, 7:07 AM

Thu, Oct 12

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

Wed, Oct 11

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…
Wed, Oct 11, 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….
Wed, Oct 11, 12:05 PM
dneilson created D38814: [SCEV] Properly handle the case of a non-constant start with a zero accum in ScalarEvolution::createAddRecFromPHIWithCastsImpl.
Wed, Oct 11, 11:24 AM

Tue, Oct 10

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

Wed, Oct 4

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

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

Wed, Oct 4, 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
Wed, Oct 4, 11:20 AM

Tue, Oct 3

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

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

Tue, Oct 3, 11:10 AM

Fri, Sep 29

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

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)).

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

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?

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

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.

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

Fri, Sep 22

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)

Fri, Sep 22, 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…
Fri, Sep 22, 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….
Fri, Sep 22, 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

Fri, Sep 22, 7:25 AM

Thu, Sep 21

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.

Thu, Sep 21, 12:08 PM

Wed, Sep 20

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?

Wed, Sep 20, 1:53 PM
dneilson created D38097: [IVUsers] Changes to make IVUsers's results robust to instruction and uselist ordering.
Wed, Sep 20, 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.

Wed, Sep 20, 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).
Wed, Sep 20, 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. )

Wed, Sep 20, 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

Jun 30 2017

dneilson added a comment to D34629: Add isElementAtomic query method to MemInstrinsic class..

Oh, I see...

What's the advantage of "I->isElementAtomic()" over "isa<ElementUnorderedAtomicMemCpyInst>(I)"?

Not sure it makes sense to make ElementUnorderedAtomicMemCpyInst inherit from MemCpyInst; it's likely to be confusing that a MemCpyInst might not really be a memcpy.

Jun 30 2017, 12:26 PM
dneilson added a comment to D34885: Add element atomic memset intrinsic.

Codewise, this looks fine and clearly implements the semantics you document. However, I wondering if those are the most useful semantics. Once we answer the design question below, if we still want to go in this direction the patch LGTM.

This can be used to represent any pattern memset currently can. In particular it does handle larger elements with repeating bytewise values. It does not full cover the Arrays.fill case though because a value such as "i32 15" can't be represented. I could see an argument in favour of handling that case entirely separately or all of it in a single family of intrinsics. What do you think?

Jun 30 2017, 8:43 AM
dneilson added reviewers for D34883: Check for MemIntrinsic::isElementAtomic() in InstCombine: reames, anna, skatkov, mkazantsev.
Jun 30 2017, 7:42 AM
dneilson updated the summary of D34883: Check for MemIntrinsic::isElementAtomic() in InstCombine.
Jun 30 2017, 7:41 AM
dneilson added dependencies for D34883: Check for MemIntrinsic::isElementAtomic() in InstCombine: D34885: Add element atomic memset intrinsic, D34884: Add element atomic memmove intrinsic, D34629: Add isElementAtomic query method to MemInstrinsic class..
Jun 30 2017, 7:40 AM
dneilson added a dependent revision for D34629: Add isElementAtomic query method to MemInstrinsic class.: D34883: Check for MemIntrinsic::isElementAtomic() in InstCombine.
Jun 30 2017, 7:40 AM
dneilson added a dependent revision for D34885: Add element atomic memset intrinsic: D34883: Check for MemIntrinsic::isElementAtomic() in InstCombine.
Jun 30 2017, 7:40 AM
dneilson added a dependent revision for D34884: Add element atomic memmove intrinsic: D34883: Check for MemIntrinsic::isElementAtomic() in InstCombine.
Jun 30 2017, 7:40 AM
dneilson created D34885: Add element atomic memset intrinsic.
Jun 30 2017, 7:39 AM
dneilson created D34884: Add element atomic memmove intrinsic.
Jun 30 2017, 7:39 AM
dneilson added a comment to D34629: Add isElementAtomic query method to MemInstrinsic class..

Could you include one of the users of this function in the patch so it's clear how you're intending to use it?

I think this looks okay.

Jun 30 2017, 7:39 AM
dneilson created D34883: Check for MemIntrinsic::isElementAtomic() in InstCombine.
Jun 30 2017, 7:38 AM

Jun 29 2017

dneilson committed rL306681: Restore original intent of memset instcombine test.
Restore original intent of memset instcombine test
Jun 29 2017, 7:21 AM
dneilson closed D34642: Restore original intent of memset instcombine test by committing rL306681: Restore original intent of memset instcombine test.
Jun 29 2017, 7:21 AM
dneilson committed rL306679: Explicitly check for presence of correct results in instcombine memmove test.
Explicitly check for presence of correct results in instcombine memmove test
Jun 29 2017, 7:18 AM
dneilson closed D34645: Explicitly check for presence of correct results in instcombine memmove test.
Jun 29 2017, 7:18 AM

Jun 27 2017

dneilson updated the diff for D34642: Restore original intent of memset instcombine test.

Use CHECK-NEXT to verify test contents.

Jun 27 2017, 7:08 AM

Jun 26 2017

dneilson created D34645: Explicitly check for presence of correct results in instcombine memmove test.
Jun 26 2017, 2:06 PM