How to track down a bad llvm optimization pass

Dan Olson via digitalmars-d-ldc digitalmars-d-ldc at puremagic.com
Wed Jun 22 00:23:54 PDT 2016


Dan Olson <gorox at comcast.net> writes:

> Dan Olson <gorox at concast.net> writes:
>
>> On Tuesday, 21 June 2016 at 19:41:59 UTC, Dan Olson wrote:
>>> Hmmm.  I looked at failing code in std.conv.  I think it does a
>>> negative shift, which is undefined in C.  It is the opSlice()
>>> method.
>>
>> Or rather with unsigned types, a really big shift, also undefined.
>
> std.conv.toChars() just has a bug and LLVM 3.8 is behaving ok with an
> undefined operation.  The unittest for toChars isn't very exhaustive for
> opSlice and gets lucky on Intel targets.  LDC with LLVM 3.5 also gets
> lucky on the limited unittest but toChars() clearly gives wrong results
> with better test case.
>
> Simple fix, following line should not have `- 1`:
>
> https://github.com/ldc-developers/phobos/blob/ldc/std/conv.d#L5700
>
> I fixed locally and std.conv unittest is happy now.  I will run full
> test suite on arm to make doubly sure, but I think this will end up as a
> phobos bug and PR.

Testsuite passes with LLVM 3.8.0 now.  Filed phobos bug:

https://issues.dlang.org/show_bug.cgi?id=16192

Should probably make an LDC Issue to track and pick phobos fix.


More information about the digitalmars-d-ldc mailing list