<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm/lib/Target, branch testing</title>
<subtitle>http://llvm.org</subtitle>
<id>https://git.amat.us/llvm/atom/lib/Target?h=testing</id>
<link rel='self' href='https://git.amat.us/llvm/atom/lib/Target?h=testing'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/'/>
<updated>2013-03-22T00:29:10Z</updated>
<entry>
<title>Fix the invalid opcode for Mips branch instructions in the assembler</title>
<updated>2013-03-22T00:29:10Z</updated>
<author>
<name>Jack Carter</name>
<email>jack.carter@imgtec.com</email>
</author>
<published>2013-03-22T00:29:10Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=d3107fbc54a5b5156f0aabc8788724f1469eb9df'/>
<id>urn:sha1:d3107fbc54a5b5156f0aabc8788724f1469eb9df</id>
<content type='text'>
For mips a branch an 18-bit signed offset (the 16-bit 
offset field shifted left 2 bits) is added to the 
address of the instruction following the branch 
(not the branch itself), in the branch delay slot, 
to form a PC-relative effective target address. 

Previously, the code generator did not perform the 
shift of the immediate branch offset which resulted 
in wrong instruction opcode. This patch fixes the issue.

Contributor: Vladimir Medic



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177687 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>This patch that enables the Mips assembler to use symbols for offset for instructions</title>
<updated>2013-03-22T00:05:30Z</updated>
<author>
<name>Jack Carter</name>
<email>jack.carter@imgtec.com</email>
</author>
<published>2013-03-22T00:05:30Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=25df6a93f3324bd30f44dcb95fd17aff0a92d438'/>
<id>urn:sha1:25df6a93f3324bd30f44dcb95fd17aff0a92d438</id>
<content type='text'>
This patch uses the generated instruction info tables to 
identify memory/load store instructions.
After successful matching and based on the operand type 
and size, it generates additional instructions to the output.

Contributor: Vladimir Medic



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177685 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Remove the G8RC_NOX0_and_GPRC_NOR0 PPC register class</title>
<updated>2013-03-21T23:45:03Z</updated>
<author>
<name>Hal Finkel</name>
<email>hfinkel@anl.gov</email>
</author>
<published>2013-03-21T23:45:03Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=7697370adff8983e2a3de493362f0d8c9f9b0e17'/>
<id>urn:sha1:7697370adff8983e2a3de493362f0d8c9f9b0e17</id>
<content type='text'>
As Jakob pointed out in his review of r177423, having a shared ZERO
register between the 32- and 64-bit register classes causes this
odd G8RC_NOX0_and_GPRC_NOR0 class to be created. As recommended,
this adds a ZERO8 register which differentiates the 32- and 64-bit
zeros.

No functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177683 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Fix a register-class comparison bug in PPCCTRLoops</title>
<updated>2013-03-21T23:23:34Z</updated>
<author>
<name>Hal Finkel</name>
<email>hfinkel@anl.gov</email>
</author>
<published>2013-03-21T23:23:34Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=3ea1b064a0b9c3d161b0f77a9e957970f98907ab'/>
<id>urn:sha1:3ea1b064a0b9c3d161b0f77a9e957970f98907ab</id>
<content type='text'>
Thanks to Jakob for isolating the underlying problem from the
test case in r177423. The original commit had introduced
asymmetric copy operations, but these turned out to be a work-around
to the real problem (the use of == instead of hasSubClassEq in PPCCTRLoops).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177679 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>This patch enables the Mips .set directive to define aliases</title>
<updated>2013-03-21T21:44:16Z</updated>
<author>
<name>Jack Carter</name>
<email>jack.carter@imgtec.com</email>
</author>
<published>2013-03-21T21:44:16Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=c91b5e197bb41ccb2f9f78b6176e61c848df9e15'/>
<id>urn:sha1:c91b5e197bb41ccb2f9f78b6176e61c848df9e15</id>
<content type='text'>
The .set directive in the Mips the assembler can be 
used to set the value of a symbol to an expression. 
This changes the symbol's value and type to conform 
to the expression's.

Syntax: .set symbol, expression

This patch implements the parsing of the above syntax 
and enables the parser to use defined symbols when 
parsing operands.

Contributor: Vladimir Medic



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177667 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Implement builtin_{setjmp/longjmp} on PPC</title>
<updated>2013-03-21T21:37:52Z</updated>
<author>
<name>Hal Finkel</name>
<email>hfinkel@anl.gov</email>
</author>
<published>2013-03-21T21:37:52Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=7ee74a663a3b4d4ee6b55d23362f347ed1d390c2'/>
<id>urn:sha1:7ee74a663a3b4d4ee6b55d23362f347ed1d390c2</id>
<content type='text'>
This implements SJLJ lowering on PPC, making the Clang functions
__builtin_{setjmp/longjmp} functional on PPC platforms. The implementation
strategy is similar to that on X86, with the exception that a branch-and-link
variant is used to get the right jump address. Credit goes to Bill Schmidt for
suggesting the use of the unconditional bcl form (instead of the regular bl
instruction) to limit return-address-cache pollution.

Benchmarking the speed at -O3 of:

static jmp_buf env_sigill;

void foo() {
                __builtin_longjmp(env_sigill,1);
}

main() {
	...

        for (int i = 0; i &lt; c; ++i) {
                if (__builtin_setjmp(env_sigill)) {
                        goto done;
                } else {
                        foo();
                }

done:;
        }

	...
}

vs. the same code using the libc setjmp/longjmp functions on a P7 shows that
this builtin implementation is ~4x faster with Altivec enabled and ~7.25x
faster with Altivec disabled. This comparison is somewhat unfair because the
libc version must also save/restore the VSX registers which we don't yet
support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177666 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Add support for spilling VRSAVE on PPC</title>
<updated>2013-03-21T19:03:21Z</updated>
<author>
<name>Hal Finkel</name>
<email>hfinkel@anl.gov</email>
</author>
<published>2013-03-21T19:03:21Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=10f7f2a222d0e83dc0c33ad506a7686190c2f7a2'/>
<id>urn:sha1:10f7f2a222d0e83dc0c33ad506a7686190c2f7a2</id>
<content type='text'>
Although there is only one Altivec VRSAVE register, it is a member of
a register class, and we need the ability to spill it. Because this
register is normally callee-preserved and handled by special code this
has never before been necessary. However, this capability will be required by
a forthcoming commit adding SjLj support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177654 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Correct PPC FRAMEADDR lowering using a pseudo-register</title>
<updated>2013-03-21T19:03:19Z</updated>
<author>
<name>Hal Finkel</name>
<email>hfinkel@anl.gov</email>
</author>
<published>2013-03-21T19:03:19Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=e9cc0a09ae38c87b1b26a44f5e32222ede4f84e6'/>
<id>urn:sha1:e9cc0a09ae38c87b1b26a44f5e32222ede4f84e6</id>
<content type='text'>
The old code used to lower FRAMEADDR tried to replicate the logic in the real
frame-lowering code that determines whether or not the frame pointer (r31) will
be used. When it seemed as through the frame pointer would not be used, the
stack pointer (r1) was used instead. Unfortunately, because the stack size is
not yet known, this does not work. Instead, this change introduces new
always-reserved pseudo-registers (FP and FP8) that are replaced during prologue
insertion with the real frame-pointer register (either r1 or r31).

It is important that this intrinsic always return a valid frame address because
it is used by Clang to store the frame address as part of code generation for
__builtin_setjmp.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177653 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Avoid NEON SP-FP unless unsafe-math or Darwin</title>
<updated>2013-03-21T18:47:47Z</updated>
<author>
<name>Renato Golin</name>
<email>renato.golin@linaro.org</email>
</author>
<published>2013-03-21T18:47:47Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=3382a840747c42c4a98eac802ee7b347a8ded1e4'/>
<id>urn:sha1:3382a840747c42c4a98eac802ee7b347a8ded1e4</id>
<content type='text'>
NEON is not IEEE 754 compliant, so we should avoid lowering single-precision
floating point operations with NEON unless unsafe-math is turned on. The
equivalent VFP instructions are IEEE 754 compliant, but in some cores they're
much slower, so some archs/OSs might still request it to be on by default,
such as Swift and Darwin.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177651 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Add a WriteMicrocoded for ancient microcoded instructions.</title>
<updated>2013-03-21T00:07:17Z</updated>
<author>
<name>Jakob Stoklund Olesen</name>
<email>stoklund@2pi.dk</email>
</author>
<published>2013-03-21T00:07:17Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=c1ea2c5d6d5870b44c2021729c2e8a627753e83b'/>
<id>urn:sha1:c1ea2c5d6d5870b44c2021729c2e8a627753e83b</id>
<content type='text'>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177611 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
</feed>
