Dylan McKay
880b08eb60
[AVR] Enable the '__do_copy_data' function
...
Also enables '__do_clear_bss'.
These functions are automaticalled called by the CRT if they are
declared.
We need these to be called otherwise RAM will start completely
uninitialised, even though we need to copy RAM variables from progmem to
RAM.
llvm-svn: 312905
2017-09-11 10:32:51 +00:00
Dylan McKay
8a8f3f7194
[AVR] Use the correct register classes for 16-bit atomic operations
...
llvm-svn: 311620
2017-08-24 00:14:38 +00:00
Dylan McKay
588df0306e
[AVR] Remove the instrumentation pass
...
I have a much better way of running integration tests now.
https://github.com/dylanmckay/avr-test-suite
llvm-svn: 308857
2017-07-23 23:39:11 +00:00
Dylan McKay
1034ec14f4
[AVR] Improve the 'icall-func-pointer-correct-addr-space.ll' test
...
Patch by Carl Peto.
llvm-svn: 308856
2017-07-23 23:00:55 +00:00
Dylan McKay
e228272ebd
[AVR] Fix a typo in the tests
...
llvm-svn: 308148
2017-07-16 22:31:07 +00:00
Dylan McKay
dcba8216a6
[AVR] Fix indirect calls to function pointers
...
Patch by Carl Peto.
llvm-svn: 307888
2017-07-13 08:09:36 +00:00
Dylan McKay
9805bce624
[AVR] Use the generic branch relaxer
...
llvm-svn: 307617
2017-07-11 04:17:13 +00:00
Dylan McKay
d5e39b8d0f
[AVR] Fix test errors due to tied operands not matching
...
Broken due to r307259.
llvm-svn: 307503
2017-07-09 16:36:35 +00:00
Dylan McKay
4df9fae587
Revert "[AVR] Add the branch selection pass from the GitHub repository"
...
This reverts commit 602ef067c1d58ecb425d061f35f2bc4c7e92f4f3.
llvm-svn: 307111
2017-07-05 00:50:56 +00:00
Dylan McKay
590d049bd1
[AVR] Add the branch selection pass from the GitHub repository
...
We should rewrite this using the generic branch relaxation pass, but for
the moment having this pass is better than hitting an assertion error.
llvm-svn: 307109
2017-07-05 00:41:19 +00:00
Dylan McKay
71adee46e4
[AVR] Fix bug which caused assertion errors for some FRMIDX instructions
...
Previously, if a basic block ended with a FRMIDX instruction, we would
end up doing something like this.
*std::next(MBB.end())
Which would hit an error:
"Assertion `!NodePtr->isKnownSentinel()' failed."
llvm-svn: 307057
2017-07-04 04:40:06 +00:00
Dylan McKay
e7b364c5a9
[AVR] Fix a big in shift operator lowering; Authored by Dr. Gergo Erdi
...
When generating code for a shift loop, check the shift
amount against the literal value 0, not R0
llvm-svn: 304284
2017-05-31 06:27:46 +00:00
Dylan McKay
c826f672fe
[AVR] When lowering Select8/Select16, put newly generated MBBs in the same spot
...
Contributed by Dr. Gergő Érdi.
Fixes a bug.
Raised from (https://github.com/avr-rust/rust/issues/49 ).
llvm-svn: 302973
2017-05-13 00:22:34 +00:00
Dylan McKay
56c6d8c476
[AVR] Reserve the Y register in all functions
...
llvm-svn: 302017
2017-05-03 11:56:01 +00:00
Dylan McKay
d46a1c2e9a
[AVR] Save/restore the frame pointer for all functions
...
A recent commit I made made it so that we only did this for signal or
interrupt handlers. This broke normal functions.
llvm-svn: 301893
2017-05-02 01:57:48 +00:00
Dylan McKay
01c4c20127
[AVR] Implement non-constant bit rotations
...
This lets us do bit rotations of variable amount.
llvm-svn: 301794
2017-05-01 09:48:55 +00:00
Dylan McKay
0e7217df94
[AVR] Support the LDWRdPtr instruction with the same Src+Dst register
...
llvm-svn: 301313
2017-04-25 15:09:04 +00:00
Dylan McKay
6596f8148e
[AVR] Remove the 'multibyte' asm test
...
It tests registers which are not actually used on AVR.
llvm-svn: 300684
2017-04-19 12:13:45 +00:00
Dylan McKay
80ec3c2ad2
[AVR] Fix the test suite
...
A bunch of tests failed because memory operations have been reordered.
I am unsure which commit changed this behaviour as the AVR build was
failing at that point with an unrelated error.
This commit just reoders some of the CHECK lines in some tests to suit
current llc output.
llvm-svn: 300682
2017-04-19 12:02:52 +00:00
Dylan McKay
3f6096c4a4
[AVR] Disable integrated assembler for a few tests
...
Fixes the build.
llvm-svn: 295895
2017-02-22 22:41:13 +00:00
Matthias Braun
075724a5d9
MIRTests: Remove unnecessary 2>&1 redirection
...
llc mir output goes to stdout nowadays, so the 2>&1 is not necessary
anymore for most tests.
llvm-svn: 295859
2017-02-22 18:47:41 +00:00
Dylan McKay
a88be31eec
[AVR] Implement stacksave/stackrestore by expanding (PR31342)
...
Summary:
Authored by Florian Zeitz.
This implements the missing stacksave/stackrestore intrinsics via expansion.
Output of `llc -O0 -march=avr ~/devel/llvm/test/CodeGen/Generic/stacksave-restore.ll` for sanity checking (comments mine):
```
.text
.file ".../llvm/test/CodeGen/Generic/stacksave-restore.ll"
.globl test
.p2align 1
.type test,@function
test: ; @test
; BB#0:
push r28
push r29
in r28, 61
in r29, 62
sbiw r28, 4
in r0, 63
cli
out 62, r29
out 63, r0
out 61, r28
in r18, 61
in r19, 62
mov r20, r22
mov r21, r23
in r30, 61
in r31, 62
lsl r22
rol r23
lsl r22
rol r23
in r26, 61
in r27, 62
sub r26, r22
sbc r27, r23
andi r26, 252
in r0, 63
cli
out 62, r27
out 63, r0
out 61, r26
in r0, 63
cli
out 62, r31
out 63, r0
out 61, r30
in r30, 61
in r31, 62
sub r30, r22
sbc r31, r23
andi r30, 252
in r0, 63
cli
out 62, r31
out 63, r0
out 61, r30
std Y+3, r24 ; 2-byte Folded Spill
std Y+4, r25 ; 2-byte Folded Spill
mov r24, r26
mov r25, r27
in r0, 63
cli
out 62, r19
out 63, r0
out 61, r18
std Y+1, r20 ; 2-byte Folded Spill
std Y+2, r21 ; 2-byte Folded Spill
adiw r28, 4
in r0, 63
cli
out 62, r29
out 63, r0
out 61, r28
pop r29
pop r28
ret
.Lfunc_end0:
.size test, .Lfunc_end0-test
```
Reviewers: dylanmckay
Reviewed By: dylanmckay
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D29553
llvm-svn: 294146
2017-02-05 21:35:45 +00:00
Dylan McKay
2883d7625a
[AVR] Marm MIR test functions as tracking liveness information
...
This fixes an assertion error that broke three tests.
llvm-svn: 294140
2017-02-05 20:25:34 +00:00
Dylan McKay
1f16d209e4
[AVR] Fix a bug where asm operands are printed twice
...
We would unconditionally call printOperand, even if PrintAsmOperand
already printed the immediate.
llvm-svn: 294121
2017-02-05 10:42:49 +00:00
Dylan McKay
b83005c02c
[AVR] Implement TargetLoweing::getRegisterByName
...
This allows the use of the 'read_register' intrinsics used by clang's
named register globals features.
llvm-svn: 291375
2017-01-07 23:39:47 +00:00
Dylan McKay
a840a5bb5c
[AVR] Optimize 16-bit ANDs with '1'
...
Summary: Fixes PR 31345
Reviewers: dylanmckay
Subscribers: fhahn, llvm-commits
Differential Revision: https://reviews.llvm.org/D28186
llvm-svn: 290778
2016-12-31 01:07:14 +00:00
Dylan McKay
e1112141cb
[AVR] Optimize 16-bit ORs with '0'
...
Summary: Fixes PR 31344
Authored by Anmol P. Paralkar
Reviewers: dylanmckay
Subscribers: fhahn, llvm-commits
Differential Revision: https://reviews.llvm.org/D28121
llvm-svn: 290732
2016-12-30 00:21:56 +00:00
Jun Bum Lim
4f195c2484
[CodeGenPrep] Skip merging empty case blocks
...
This is recommit of r287553 after fixing the invalid loop info after eliminating an empty block and unit test failures in AVR and WebAssembly :
Summary: Merging an empty case block into the header block of switch could cause ISel to add COPY instructions in the header of switch, instead of the case block, if the case block is used as an incoming block of a PHI. This could potentially increase dynamic instructions, especially when the switch is in a loop. I added a test case which was reduced from the benchmark I was targetting.
Reviewers: t.p.northover, mcrosier, manmanren, wmi, joerg, davidxl
Subscribers: joerg, qcolombet, danielcdh, hfinkel, mcrosier, llvm-commits
Differential Revision: https://reviews.llvm.org/D22696
llvm-svn: 289988
2016-12-16 20:38:39 +00:00
Dylan McKay
f71b2bc86e
[AVR] Add a test for 64-bit left shifts
...
llvm-svn: 289936
2016-12-16 11:40:00 +00:00
Dylan McKay
dbe4adba91
[AVR] Support floats in the instrumention pass
...
This also refactors some common code into the 'GetTypeName' method.
llvm-svn: 289803
2016-12-15 11:02:41 +00:00
Dylan McKay
fea5788d65
[AVR] Add a function instrumentation pass
...
This will be used for an on-chip test suite.
llvm-svn: 289641
2016-12-14 10:15:00 +00:00
Dylan McKay
7b63330234
[AVR] Add an 'relax memory operation' pass
...
Summary:
This pass will be used to relax instructions which use out of bounds
memory accesses to equivalent operations that can work with the
addresses.
The pass currently implements relaxation for the STDWPtrQRr instruction.
Without this pass, an assertion error would be hit in the pseudo expansion pass.
In the future, we will need to add more instructions to this pass. We can do
that on a case-by-case basic.
Reviewers: arsenm, kparzysz
Subscribers: wdng, llvm-commits, mgorny
Differential Revision: https://reviews.llvm.org/D27650
llvm-svn: 289517
2016-12-13 05:53:14 +00:00
Dylan McKay
f1fc745c90
[AVR] Add calling convention CodeGen tests
...
This adds CodeGen tests for the AVR C calling convention.
llvm-svn: 289369
2016-12-11 07:09:45 +00:00
Dylan McKay
acfd2dc1a0
[AVR] Add a test to validate a simple 'blinking led' program
...
llvm-svn: 289362
2016-12-11 04:59:39 +00:00
Dylan McKay
c9ba38b704
[AVR] Fix and clean up the inline assembly tests
...
There was a bug where we would hit an assertion if 'Q' was used as a
constraint.
I also removed hardcoded register names to prefer regexes so the tests
don't break when the register allocator changes.
llvm-svn: 289325
2016-12-10 11:49:07 +00:00
Dylan McKay
f68bc13836
[AVR] Explicitly set the target in all CodeGen tests
...
This seems to have caused failures on the buildbot.
llvm-svn: 289324
2016-12-10 11:23:16 +00:00
Dylan McKay
c328ab2ffc
[AVR] Use the register scavenger when expanding 'LDDW' instructions
...
Summary: This gets rid of the hardcoded 'r0' that was used previously.
Reviewers: asl
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D27567
llvm-svn: 289322
2016-12-10 10:51:55 +00:00
Dylan McKay
12bab3b378
[AVR] Support stores to undefined pointers
...
This would previously trigger an assertion error in AVRISelDAGToDAG.
llvm-svn: 289321
2016-12-10 10:16:13 +00:00
Dylan McKay
5205ca6bf1
[AVR] Remove a set of redundant tests
...
This fixes the build.
llvm-svn: 289201
2016-12-09 11:22:26 +00:00
Dylan McKay
9f49c87f3f
[AVR] Add tests for a large number of pseudo instructions
...
This adds MIR tests for 24 pseudo instructions.
llvm-svn: 289191
2016-12-09 07:49:04 +00:00
Dylan McKay
c77cc04cfe
[AVR] Add MIR tests for pseudo instruction expansions
...
This adds tests for 13 pseudo instruction expansions.
llvm-svn: 289039
2016-12-08 10:52:13 +00:00
Dylan McKay
cc95addb7e
[AVR] Add MIR tests for a few pseudo instructions
...
llvm-svn: 289031
2016-12-08 08:54:41 +00:00
Dylan McKay
60a412a963
[AVR] Expand 'SELECT_CC' nodes whereever possible
...
llvm-svn: 288905
2016-12-07 12:34:47 +00:00
Dylan McKay
e38eed36e2
[AVR] Move a pseudo expansion test into a folder
...
llvm-svn: 288899
2016-12-07 11:21:45 +00:00
Dylan McKay
8e5826c4b7
[AVR] Allow loading from stack slots where src and dest registers are identical
...
Fixes PR 31256
llvm-svn: 288897
2016-12-07 11:08:56 +00:00
Dylan McKay
f42adfd7eb
[AVR] Remove 'XFAIL' from a CodeGen test
...
This seems to be fixed as of r288052.
llvm-svn: 288618
2016-12-04 09:50:42 +00:00
Dylan McKay
f17dce2e18
Un-XFAIL an AVR CodeGen test
...
llvm-svn: 287958
2016-11-26 01:07:32 +00:00
Dylan McKay
0d7a1d4169
[AVR] Mark the 'select-must-add-unconditional-jump' test as 'XFAIL'
...
llvm-svn: 287871
2016-11-24 12:38:54 +00:00
Dylan McKay
7d2eae2a90
[AVR] Remove some accidentally-commited code that broke the bots
...
This is a remnant of an on-chip unit testing tool that has since been
moved out-of-tree.
It was accidentally committed in r287162.
llvm-svn: 287180
2016-11-17 00:09:38 +00:00
Dylan McKay
9912e95275
[AVR] Fix basic block naming in ctlz and cttz tests
...
The branch selector would change the names.
llvm-svn: 287174
2016-11-16 22:48:38 +00:00