[PATCH] D48832: [ARM] ARMCodeGenPrepare backend pass

Sjoerd Meijer via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 16 07:26:13 PDT 2018


SjoerdMeijer added a comment.

We are down to 3 errors, compared to  14 before. Before we had 2 issues: the backend compile error was responsible for 12 errors, the miscompilation for 2. The build error disappeared, so we have only the miscompilations remaining. The first miscompilation is also resolved, but we have some new ones (the tests progress further now). The first one I looked at is very similar to the one I reported earlier:

assert((short1 = ~short2) == short3);

but now the operator is different (of course the variables have different values):

(short *= short2) == short3

This test file is doing similar checks, testing  operators += and -= and /= and  %= and &= and |= and ^=. Perhaps you can see if you can explain these failures. Otherwise, let me know if you need full reproducers. Looks like these patterns are responsible for 2 test failures.

The 3rd failure is an assertion failure:

  lib/IR/Instructions.cpp:2463: static llvm::CastInst* llvm::CastInst::Create(llvm::Instruction::CastOps, llvm::Value*, llvm::Type*, const llvm::Twine&, llvm::Instruction*): Assertion `castIsValid(op, S, Ty) && "Invalid cast!"' failed

This is conversion issue from small ints to long long. I think this should be enough to trigger it:

  unsigned char uc = 42;
  void foo() {
    x = uc;
    assert(x == 42ll);
  }


https://reviews.llvm.org/D48832





More information about the llvm-commits mailing list