R600/SI: Add a pattern for i64 and in a branch
authorTom Stellard <thomas.stellard@amd.com>
Wed, 3 Sep 2014 15:22:41 +0000 (15:22 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Wed, 3 Sep 2014 15:22:41 +0000 (15:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217041 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/SIInstructions.td
test/CodeGen/R600/and.ll

index 47ca42c00b1c8dafe0b51e8ed53037403ef244ba..71792d120742ee6171b3b8621ecf3dea405d79e1 100644 (file)
@@ -1897,6 +1897,7 @@ class BinOp64Pat <SDNode node, Instruction inst> : Pat <
                   (EXTRACT_SUBREG i64:$src1, sub1)), sub1)
 >;
 
+def : BinOp64Pat <and, V_AND_B32_e32>;
 def : BinOp64Pat <or, V_OR_B32_e32>;
 def : BinOp64Pat <xor, V_XOR_B32_e32>;
 
index e20037e6bb670c8553dcad9c17c08c5033616f2d..7bbbec2d9691b1dae2819387be312ddd35e4f9a0 100644 (file)
@@ -108,6 +108,26 @@ define void @v_and_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 addr
   ret void
 }
 
+; FUNC-LABEL: @v_and_i64_br
+; SI: V_AND_B32
+; SI: V_AND_B32
+define void @v_and_i64_br(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 addrspace(1)* %bptr, i32 %cond) {
+entry:
+  %tmp0 = icmp eq i32 %cond, 0
+  br i1 %tmp0, label %if, label %endif
+
+if:
+  %a = load i64 addrspace(1)* %aptr, align 8
+  %b = load i64 addrspace(1)* %bptr, align 8
+  %and = and i64 %a, %b
+  br label %endif
+
+endif:
+  %tmp1 = phi i64 [%and, %if], [0, %entry]
+  store i64 %tmp1, i64 addrspace(1)* %out, align 8
+  ret void
+}
+
 ; FUNC-LABEL: @v_and_constant_i64
 ; SI: V_AND_B32
 ; SI: V_AND_B32