diff options
author | Bill Wendling <isanbard@gmail.com> | 2007-01-16 03:42:04 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2007-01-16 03:42:04 +0000 |
commit | eb9a42c90bf7e21ad8544315a65f86b668cc0277 (patch) | |
tree | 553d86fe602ecf7369e88d4deff2c664f92fdd0b /test/CodeGen/PowerPC/2007-01-15-AsmDialect.ll | |
parent | 8f3f3d103a8b92bd0514ab5998865205e17ef550 (diff) | |
download | external_llvm-eb9a42c90bf7e21ad8544315a65f86b668cc0277.zip external_llvm-eb9a42c90bf7e21ad8544315a65f86b668cc0277.tar.gz external_llvm-eb9a42c90bf7e21ad8544315a65f86b668cc0277.tar.bz2 |
Fix for PR1095:
LLVM would miscompile ASM dialects when compiling for PPC. Added dialects for
the X86 and PPC backends. It defaults to "0", the first variant of a compound
inline asm expression.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33246 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/PowerPC/2007-01-15-AsmDialect.ll')
-rw-r--r-- | test/CodeGen/PowerPC/2007-01-15-AsmDialect.ll | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/CodeGen/PowerPC/2007-01-15-AsmDialect.ll b/test/CodeGen/PowerPC/2007-01-15-AsmDialect.ll new file mode 100644 index 0000000..916e168 --- /dev/null +++ b/test/CodeGen/PowerPC/2007-01-15-AsmDialect.ll @@ -0,0 +1,26 @@ +; RUN: llvm-as < %s | llc -march=ppc32 | grep cntlzw + +define i32 %foo() { +entry: + %retval = alloca i32, align 4 ; <i32*> [#uses=2] + %tmp = alloca i32, align 4 ; <i32*> [#uses=2] + %ctz_x = alloca i32, align 4 ; <i32*> [#uses=3] + %ctz_c = alloca i32, align 4 ; <i32*> [#uses=2] + "alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] + store i32 61440, i32* %ctz_x + %tmp = load i32* %ctz_x ; <i32> [#uses=1] + %tmp1 = sub i32 0, %tmp ; <i32> [#uses=1] + %tmp2 = load i32* %ctz_x ; <i32> [#uses=1] + %tmp3 = and i32 %tmp1, %tmp2 ; <i32> [#uses=1] + %tmp4 = call i32 asm "$(cntlz$|cntlzw$) $0,$1", "=r,r,~{dirflag},~{fpsr},~{flags}"( i32 %tmp3 ) ; <i32> [#uses=1] + store i32 %tmp4, i32* %ctz_c + %tmp5 = load i32* %ctz_c ; <i32> [#uses=1] + store i32 %tmp5, i32* %tmp + %tmp6 = load i32* %tmp ; <i32> [#uses=1] + store i32 %tmp6, i32* %retval + br label %return + +return: ; preds = %entry + %retval = load i32* %retval ; <i32> [#uses=1] + ret i32 %retval +} |