diff options
author | Shih-wei Liao <sliao@google.com> | 2010-02-10 11:10:31 -0800 |
---|---|---|
committer | Shih-wei Liao <sliao@google.com> | 2010-02-10 11:10:31 -0800 |
commit | e264f62ca09a8f65c87a46d562a4d0f9ec5d457e (patch) | |
tree | 59e3d57ef656cef79afa708ae0a3daf25cd91fcf /test/CodeGen/PowerPC/eqv-andc-orc-nor.ll | |
download | external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.zip external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.tar.gz external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.tar.bz2 |
Check in LLVM r95781.
Diffstat (limited to 'test/CodeGen/PowerPC/eqv-andc-orc-nor.ll')
-rw-r--r-- | test/CodeGen/PowerPC/eqv-andc-orc-nor.ll | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/test/CodeGen/PowerPC/eqv-andc-orc-nor.ll b/test/CodeGen/PowerPC/eqv-andc-orc-nor.ll new file mode 100644 index 0000000..558fd1b --- /dev/null +++ b/test/CodeGen/PowerPC/eqv-andc-orc-nor.ll @@ -0,0 +1,93 @@ +; RUN: llc < %s -march=ppc32 | \ +; RUN: grep eqv | count 3 +; RUN: llc < %s -march=ppc32 -mcpu=g5 | \ +; RUN: grep andc | count 3 +; RUN: llc < %s -march=ppc32 | \ +; RUN: grep orc | count 2 +; RUN: llc < %s -march=ppc32 -mcpu=g5 | \ +; RUN: grep nor | count 3 +; RUN: llc < %s -march=ppc32 | \ +; RUN: grep nand | count 1 + +define i32 @EQV1(i32 %X, i32 %Y) { + %A = xor i32 %X, %Y ; <i32> [#uses=1] + %B = xor i32 %A, -1 ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @EQV2(i32 %X, i32 %Y) { + %A = xor i32 %X, -1 ; <i32> [#uses=1] + %B = xor i32 %A, %Y ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @EQV3(i32 %X, i32 %Y) { + %A = xor i32 %X, -1 ; <i32> [#uses=1] + %B = xor i32 %Y, %A ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @ANDC1(i32 %X, i32 %Y) { + %A = xor i32 %Y, -1 ; <i32> [#uses=1] + %B = and i32 %X, %A ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @ANDC2(i32 %X, i32 %Y) { + %A = xor i32 %X, -1 ; <i32> [#uses=1] + %B = and i32 %A, %Y ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @ORC1(i32 %X, i32 %Y) { + %A = xor i32 %Y, -1 ; <i32> [#uses=1] + %B = or i32 %X, %A ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @ORC2(i32 %X, i32 %Y) { + %A = xor i32 %X, -1 ; <i32> [#uses=1] + %B = or i32 %A, %Y ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @NOR1(i32 %X) { + %Y = xor i32 %X, -1 ; <i32> [#uses=1] + ret i32 %Y +} + +define i32 @NOR2(i32 %X, i32 %Y) { + %Z = or i32 %X, %Y ; <i32> [#uses=1] + %R = xor i32 %Z, -1 ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @NAND1(i32 %X, i32 %Y) { + %Z = and i32 %X, %Y ; <i32> [#uses=1] + %W = xor i32 %Z, -1 ; <i32> [#uses=1] + ret i32 %W +} + +define void @VNOR(<4 x float>* %P, <4 x float>* %Q) { + %tmp = load <4 x float>* %P ; <<4 x float>> [#uses=1] + %tmp.upgrd.1 = bitcast <4 x float> %tmp to <4 x i32> ; <<4 x i32>> [#uses=1] + %tmp2 = load <4 x float>* %Q ; <<4 x float>> [#uses=1] + %tmp2.upgrd.2 = bitcast <4 x float> %tmp2 to <4 x i32> ; <<4 x i32>> [#uses=1] + %tmp3 = or <4 x i32> %tmp.upgrd.1, %tmp2.upgrd.2 ; <<4 x i32>> [#uses=1] + %tmp4 = xor <4 x i32> %tmp3, < i32 -1, i32 -1, i32 -1, i32 -1 > ; <<4 x i32>> [#uses=1] + %tmp4.upgrd.3 = bitcast <4 x i32> %tmp4 to <4 x float> ; <<4 x float>> [#uses=1] + store <4 x float> %tmp4.upgrd.3, <4 x float>* %P + ret void +} + +define void @VANDC(<4 x float>* %P, <4 x float>* %Q) { + %tmp = load <4 x float>* %P ; <<4 x float>> [#uses=1] + %tmp.upgrd.4 = bitcast <4 x float> %tmp to <4 x i32> ; <<4 x i32>> [#uses=1] + %tmp2 = load <4 x float>* %Q ; <<4 x float>> [#uses=1] + %tmp2.upgrd.5 = bitcast <4 x float> %tmp2 to <4 x i32> ; <<4 x i32>> [#uses=1] + %tmp4 = xor <4 x i32> %tmp2.upgrd.5, < i32 -1, i32 -1, i32 -1, i32 -1 > ; <<4 x i32>> [#uses=1] + %tmp3 = and <4 x i32> %tmp.upgrd.4, %tmp4 ; <<4 x i32>> [#uses=1] + %tmp4.upgrd.6 = bitcast <4 x i32> %tmp3 to <4 x float> ; <<4 x float>> [#uses=1] + store <4 x float> %tmp4.upgrd.6, <4 x float>* %P + ret void +} |