Change these tests to use [fi]cmp+sext instead of v[fi]cmp. No
authorChris Lattner <sabre@nondot.org>
Wed, 8 Jul 2009 00:46:57 +0000 (00:46 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 8 Jul 2009 00:46:57 +0000 (00:46 +0000)
functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74979 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/ARM/vceq.ll
test/CodeGen/ARM/vcge.ll
test/CodeGen/ARM/vcgt.ll
test/CodeGen/ARM/vfcmp.ll
test/CodeGen/ARM/vicmp.ll
test/CodeGen/ARM/vtst.ll

index 77f1890d08650509586f055442b36793270b1fb2..1af67e8d635cbfa7bdc7dd8b64300dfd713bbf38 100644 (file)
@@ -7,55 +7,63 @@
 define <8 x i8> @vceqi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
        %tmp1 = load <8 x i8>* %A
        %tmp2 = load <8 x i8>* %B
-       %tmp3 = vicmp eq <8 x i8> %tmp1, %tmp2
-       ret <8 x i8> %tmp3
+       %tmp3 = icmp eq <8 x i8> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
+       ret <8 x i8> %tmp4
 }
 
 define <4 x i16> @vceqi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
-       %tmp3 = vicmp eq <4 x i16> %tmp1, %tmp2
-       ret <4 x i16> %tmp3
+       %tmp3 = icmp eq <4 x i16> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
+       ret <4 x i16> %tmp4
 }
 
 define <2 x i32> @vceqi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
        %tmp1 = load <2 x i32>* %A
        %tmp2 = load <2 x i32>* %B
-       %tmp3 = vicmp eq <2 x i32> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = icmp eq <2 x i32> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <2 x i32> @vceqf32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp oeq <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp oeq <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <16 x i8> @vceqQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
        %tmp1 = load <16 x i8>* %A
        %tmp2 = load <16 x i8>* %B
-       %tmp3 = vicmp eq <16 x i8> %tmp1, %tmp2
-       ret <16 x i8> %tmp3
+       %tmp3 = icmp eq <16 x i8> %tmp1, %tmp2
+        %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
+       ret <16 x i8> %tmp4
 }
 
 define <8 x i16> @vceqQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
        %tmp1 = load <8 x i16>* %A
        %tmp2 = load <8 x i16>* %B
-       %tmp3 = vicmp eq <8 x i16> %tmp1, %tmp2
-       ret <8 x i16> %tmp3
+       %tmp3 = icmp eq <8 x i16> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
+       ret <8 x i16> %tmp4
 }
 
 define <4 x i32> @vceqQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
        %tmp1 = load <4 x i32>* %A
        %tmp2 = load <4 x i32>* %B
-       %tmp3 = vicmp eq <4 x i32> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = icmp eq <4 x i32> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
 
 define <4 x i32> @vceqQf32(<4 x float>* %A, <4 x float>* %B) nounwind {
        %tmp1 = load <4 x float>* %A
        %tmp2 = load <4 x float>* %B
-       %tmp3 = vfcmp oeq <4 x float> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = fcmp oeq <4 x float> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
index 14c623ea082f2aec552f61c95572a9161672400a..6dfc6dd1c9568df882bca372a1a03b44928e543d 100644 (file)
 define <8 x i8> @vcges8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
        %tmp1 = load <8 x i8>* %A
        %tmp2 = load <8 x i8>* %B
-       %tmp3 = vicmp sge <8 x i8> %tmp1, %tmp2
-       ret <8 x i8> %tmp3
+       %tmp3 = icmp sge <8 x i8> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
+       ret <8 x i8> %tmp4
 }
 
 define <4 x i16> @vcges16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
-       %tmp3 = vicmp sge <4 x i16> %tmp1, %tmp2
-       ret <4 x i16> %tmp3
+       %tmp3 = icmp sge <4 x i16> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
+       ret <4 x i16> %tmp4
 }
 
 define <2 x i32> @vcges32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
        %tmp1 = load <2 x i32>* %A
        %tmp2 = load <2 x i32>* %B
-       %tmp3 = vicmp sge <2 x i32> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = icmp sge <2 x i32> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <8 x i8> @vcgeu8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
        %tmp1 = load <8 x i8>* %A
        %tmp2 = load <8 x i8>* %B
-       %tmp3 = vicmp uge <8 x i8> %tmp1, %tmp2
-       ret <8 x i8> %tmp3
+       %tmp3 = icmp uge <8 x i8> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
+       ret <8 x i8> %tmp4
 }
 
 define <4 x i16> @vcgeu16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
-       %tmp3 = vicmp uge <4 x i16> %tmp1, %tmp2
-       ret <4 x i16> %tmp3
+       %tmp3 = icmp uge <4 x i16> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
+       ret <4 x i16> %tmp4
 }
 
 define <2 x i32> @vcgeu32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
        %tmp1 = load <2 x i32>* %A
        %tmp2 = load <2 x i32>* %B
-       %tmp3 = vicmp uge <2 x i32> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = icmp uge <2 x i32> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <2 x i32> @vcgef32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp oge <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp oge <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <16 x i8> @vcgeQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
        %tmp1 = load <16 x i8>* %A
        %tmp2 = load <16 x i8>* %B
-       %tmp3 = vicmp sge <16 x i8> %tmp1, %tmp2
-       ret <16 x i8> %tmp3
+       %tmp3 = icmp sge <16 x i8> %tmp1, %tmp2
+        %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
+       ret <16 x i8> %tmp4
 }
 
 define <8 x i16> @vcgeQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
        %tmp1 = load <8 x i16>* %A
        %tmp2 = load <8 x i16>* %B
-       %tmp3 = vicmp sge <8 x i16> %tmp1, %tmp2
-       ret <8 x i16> %tmp3
+       %tmp3 = icmp sge <8 x i16> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
+       ret <8 x i16> %tmp4
 }
 
 define <4 x i32> @vcgeQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
        %tmp1 = load <4 x i32>* %A
        %tmp2 = load <4 x i32>* %B
-       %tmp3 = vicmp sge <4 x i32> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = icmp sge <4 x i32> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
 
 define <16 x i8> @vcgeQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
        %tmp1 = load <16 x i8>* %A
        %tmp2 = load <16 x i8>* %B
-       %tmp3 = vicmp uge <16 x i8> %tmp1, %tmp2
-       ret <16 x i8> %tmp3
+       %tmp3 = icmp uge <16 x i8> %tmp1, %tmp2
+        %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
+       ret <16 x i8> %tmp4
 }
 
 define <8 x i16> @vcgeQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
        %tmp1 = load <8 x i16>* %A
        %tmp2 = load <8 x i16>* %B
-       %tmp3 = vicmp uge <8 x i16> %tmp1, %tmp2
-       ret <8 x i16> %tmp3
+       %tmp3 = icmp uge <8 x i16> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
+       ret <8 x i16> %tmp4
 }
 
 define <4 x i32> @vcgeQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
        %tmp1 = load <4 x i32>* %A
        %tmp2 = load <4 x i32>* %B
-       %tmp3 = vicmp uge <4 x i32> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = icmp uge <4 x i32> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
 
 define <4 x i32> @vcgeQf32(<4 x float>* %A, <4 x float>* %B) nounwind {
        %tmp1 = load <4 x float>* %A
        %tmp2 = load <4 x float>* %B
-       %tmp3 = vfcmp oge <4 x float> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = fcmp oge <4 x float> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
index 3f7e55078733c714f27b6d6b20063ccb8b6de40a..f9260832c2dd516c10c6edcffe3cd3543f5c8d84 100644 (file)
 define <8 x i8> @vcgts8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
        %tmp1 = load <8 x i8>* %A
        %tmp2 = load <8 x i8>* %B
-       %tmp3 = vicmp sgt <8 x i8> %tmp1, %tmp2
-       ret <8 x i8> %tmp3
+       %tmp3 = icmp sgt <8 x i8> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
+       ret <8 x i8> %tmp4
 }
 
 define <4 x i16> @vcgts16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
-       %tmp3 = vicmp sgt <4 x i16> %tmp1, %tmp2
-       ret <4 x i16> %tmp3
+       %tmp3 = icmp sgt <4 x i16> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
+       ret <4 x i16> %tmp4
 }
 
 define <2 x i32> @vcgts32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
        %tmp1 = load <2 x i32>* %A
        %tmp2 = load <2 x i32>* %B
-       %tmp3 = vicmp sgt <2 x i32> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = icmp sgt <2 x i32> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <8 x i8> @vcgtu8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
        %tmp1 = load <8 x i8>* %A
        %tmp2 = load <8 x i8>* %B
-       %tmp3 = vicmp ugt <8 x i8> %tmp1, %tmp2
-       ret <8 x i8> %tmp3
+       %tmp3 = icmp ugt <8 x i8> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
+       ret <8 x i8> %tmp4
 }
 
 define <4 x i16> @vcgtu16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
-       %tmp3 = vicmp ugt <4 x i16> %tmp1, %tmp2
-       ret <4 x i16> %tmp3
+       %tmp3 = icmp ugt <4 x i16> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
+       ret <4 x i16> %tmp4
 }
 
 define <2 x i32> @vcgtu32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
        %tmp1 = load <2 x i32>* %A
        %tmp2 = load <2 x i32>* %B
-       %tmp3 = vicmp ugt <2 x i32> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = icmp ugt <2 x i32> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <2 x i32> @vcgtf32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp ogt <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp ogt <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <16 x i8> @vcgtQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
        %tmp1 = load <16 x i8>* %A
        %tmp2 = load <16 x i8>* %B
-       %tmp3 = vicmp sgt <16 x i8> %tmp1, %tmp2
-       ret <16 x i8> %tmp3
+       %tmp3 = icmp sgt <16 x i8> %tmp1, %tmp2
+        %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
+       ret <16 x i8> %tmp4
 }
 
 define <8 x i16> @vcgtQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
        %tmp1 = load <8 x i16>* %A
        %tmp2 = load <8 x i16>* %B
-       %tmp3 = vicmp sgt <8 x i16> %tmp1, %tmp2
-       ret <8 x i16> %tmp3
+       %tmp3 = icmp sgt <8 x i16> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
+       ret <8 x i16> %tmp4
 }
 
 define <4 x i32> @vcgtQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
        %tmp1 = load <4 x i32>* %A
        %tmp2 = load <4 x i32>* %B
-       %tmp3 = vicmp sgt <4 x i32> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = icmp sgt <4 x i32> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
 
 define <16 x i8> @vcgtQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
        %tmp1 = load <16 x i8>* %A
        %tmp2 = load <16 x i8>* %B
-       %tmp3 = vicmp ugt <16 x i8> %tmp1, %tmp2
-       ret <16 x i8> %tmp3
+       %tmp3 = icmp ugt <16 x i8> %tmp1, %tmp2
+        %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
+       ret <16 x i8> %tmp4
 }
 
 define <8 x i16> @vcgtQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
        %tmp1 = load <8 x i16>* %A
        %tmp2 = load <8 x i16>* %B
-       %tmp3 = vicmp ugt <8 x i16> %tmp1, %tmp2
-       ret <8 x i16> %tmp3
+       %tmp3 = icmp ugt <8 x i16> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
+       ret <8 x i16> %tmp4
 }
 
 define <4 x i32> @vcgtQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
        %tmp1 = load <4 x i32>* %A
        %tmp2 = load <4 x i32>* %B
-       %tmp3 = vicmp ugt <4 x i32> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = icmp ugt <4 x i32> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
 
 define <4 x i32> @vcgtQf32(<4 x float>* %A, <4 x float>* %B) nounwind {
        %tmp1 = load <4 x float>* %A
        %tmp2 = load <4 x float>* %B
-       %tmp3 = vfcmp ogt <4 x float> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = fcmp ogt <4 x float> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
index 58c2068bc8f4ae7b5a27059df80d642de1543184..690b0ee5f2839835c2330a984736e9e3db384eb4 100644 (file)
 ; RUN: grep vorr %t | count 4
 ; RUN: grep vmvn %t | count 7
 
-; This tests vfcmp operations that do not map directly to NEON instructions.
+; This tests fcmp operations that do not map directly to NEON instructions.
 
 ; une is implemented with VCEQ/VMVN
 define <2 x i32> @vcunef32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp une <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp une <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; olt is implemented with VCGT
 define <2 x i32> @vcoltf32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp olt <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp olt <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; ole is implemented with VCGE
 define <2 x i32> @vcolef32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp ole <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp ole <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; uge is implemented with VCGT/VMVN
 define <2 x i32> @vcugef32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp uge <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp uge <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; ule is implemented with VCGT/VMVN
 define <2 x i32> @vculef32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp ule <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp ule <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; ugt is implemented with VCGE/VMVN
 define <2 x i32> @vcugtf32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp ugt <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp ugt <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; ult is implemented with VCGE/VMVN
 define <2 x i32> @vcultf32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp ult <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp ult <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; ueq is implemented with VCGT/VCGT/VORR/VMVN
 define <2 x i32> @vcueqf32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp ueq <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp ueq <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; one is implemented with VCGT/VCGT/VORR
 define <2 x i32> @vconef32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp one <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp one <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; uno is implemented with VCGT/VCGE/VORR/VMVN
 define <2 x i32> @vcunof32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp uno <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp uno <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 ; ord is implemented with VCGT/VCGE/VORR
 define <2 x i32> @vcordf32(<2 x float>* %A, <2 x float>* %B) nounwind {
        %tmp1 = load <2 x float>* %A
        %tmp2 = load <2 x float>* %B
-       %tmp3 = vfcmp ord <2 x float> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = fcmp ord <2 x float> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
index 86858f9293487b5f893937c61be57edd10ae0109..2cb3eba7423e4c6dde6686be28715e18d6e64314 100644 (file)
@@ -8,7 +8,7 @@
 ; RUN: grep {vcgt\\.u16} %t | count 1
 ; RUN: grep {vcge\\.u32} %t | count 1
 
-; This tests vicmp operations that do not map directly to NEON instructions.
+; This tests icmp operations that do not map directly to NEON instructions.
 ; Not-equal (ne) operations are implemented by VCEQ/VMVN.  Less-than (lt/ult)
 ; and less-than-or-equal (le/ule) are implemented by swapping the arguments
 ; to VCGT and VCGE.  Test all the operand types for not-equal but only sample
 define <8 x i8> @vcnei8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
        %tmp1 = load <8 x i8>* %A
        %tmp2 = load <8 x i8>* %B
-       %tmp3 = vicmp ne <8 x i8> %tmp1, %tmp2
-       ret <8 x i8> %tmp3
+       %tmp3 = icmp ne <8 x i8> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
+       ret <8 x i8> %tmp4
 }
 
 define <4 x i16> @vcnei16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
-       %tmp3 = vicmp ne <4 x i16> %tmp1, %tmp2
-       ret <4 x i16> %tmp3
+       %tmp3 = icmp ne <4 x i16> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
+       ret <4 x i16> %tmp4
 }
 
 define <2 x i32> @vcnei32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
        %tmp1 = load <2 x i32>* %A
        %tmp2 = load <2 x i32>* %B
-       %tmp3 = vicmp ne <2 x i32> %tmp1, %tmp2
-       ret <2 x i32> %tmp3
+       %tmp3 = icmp ne <2 x i32> %tmp1, %tmp2
+        %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
+       ret <2 x i32> %tmp4
 }
 
 define <16 x i8> @vcneQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
        %tmp1 = load <16 x i8>* %A
        %tmp2 = load <16 x i8>* %B
-       %tmp3 = vicmp ne <16 x i8> %tmp1, %tmp2
-       ret <16 x i8> %tmp3
+       %tmp3 = icmp ne <16 x i8> %tmp1, %tmp2
+        %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
+       ret <16 x i8> %tmp4
 }
 
 define <8 x i16> @vcneQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
        %tmp1 = load <8 x i16>* %A
        %tmp2 = load <8 x i16>* %B
-       %tmp3 = vicmp ne <8 x i16> %tmp1, %tmp2
-       ret <8 x i16> %tmp3
+       %tmp3 = icmp ne <8 x i16> %tmp1, %tmp2
+        %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
+       ret <8 x i16> %tmp4
 }
 
 define <4 x i32> @vcneQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
        %tmp1 = load <4 x i32>* %A
        %tmp2 = load <4 x i32>* %B
-       %tmp3 = vicmp ne <4 x i32> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = icmp ne <4 x i32> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
 
 define <16 x i8> @vcltQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
        %tmp1 = load <16 x i8>* %A
        %tmp2 = load <16 x i8>* %B
-       %tmp3 = vicmp slt <16 x i8> %tmp1, %tmp2
-       ret <16 x i8> %tmp3
+       %tmp3 = icmp slt <16 x i8> %tmp1, %tmp2
+        %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
+       ret <16 x i8> %tmp4
 }
 
 define <4 x i16> @vcles16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
-       %tmp3 = vicmp sle <4 x i16> %tmp1, %tmp2
-       ret <4 x i16> %tmp3
+       %tmp3 = icmp sle <4 x i16> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
+       ret <4 x i16> %tmp4
 }
 
 define <4 x i16> @vcltu16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
-       %tmp3 = vicmp ult <4 x i16> %tmp1, %tmp2
-       ret <4 x i16> %tmp3
+       %tmp3 = icmp ult <4 x i16> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
+       ret <4 x i16> %tmp4
 }
 
 define <4 x i32> @vcleQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
        %tmp1 = load <4 x i32>* %A
        %tmp2 = load <4 x i32>* %B
-       %tmp3 = vicmp ule <4 x i32> %tmp1, %tmp2
-       ret <4 x i32> %tmp3
+       %tmp3 = icmp ule <4 x i32> %tmp1, %tmp2
+        %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
+       ret <4 x i32> %tmp4
 }
index d4f7d2aef17a13ac5163a96eb89455077cc914d9..2f6ec3f676caebb156727369997a85a82e33362a 100644 (file)
@@ -7,46 +7,52 @@ define <8 x i8> @vtsti8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
        %tmp1 = load <8 x i8>* %A
        %tmp2 = load <8 x i8>* %B
        %tmp3 = and <8 x i8> %tmp1, %tmp2
-       %tmp4 = vicmp ne <8 x i8> %tmp3, zeroinitializer
-       ret <8 x i8> %tmp4
+       %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
+        %tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
+       ret <8 x i8> %tmp5
 }
 
 define <4 x i16> @vtsti16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
        %tmp1 = load <4 x i16>* %A
        %tmp2 = load <4 x i16>* %B
        %tmp3 = and <4 x i16> %tmp1, %tmp2
-       %tmp4 = vicmp ne <4 x i16> %tmp3, zeroinitializer
-       ret <4 x i16> %tmp4
+       %tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
+        %tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
+       ret <4 x i16> %tmp5
 }
 
 define <2 x i32> @vtsti32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
        %tmp1 = load <2 x i32>* %A
        %tmp2 = load <2 x i32>* %B
        %tmp3 = and <2 x i32> %tmp1, %tmp2
-       %tmp4 = vicmp ne <2 x i32> %tmp3, zeroinitializer
-       ret <2 x i32> %tmp4
+       %tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
+        %tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
+       ret <2 x i32> %tmp5
 }
 
 define <16 x i8> @vtstQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
        %tmp1 = load <16 x i8>* %A
        %tmp2 = load <16 x i8>* %B
        %tmp3 = and <16 x i8> %tmp1, %tmp2
-       %tmp4 = vicmp ne <16 x i8> %tmp3, zeroinitializer
-       ret <16 x i8> %tmp4
+       %tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
+        %tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
+       ret <16 x i8> %tmp5
 }
 
 define <8 x i16> @vtstQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
        %tmp1 = load <8 x i16>* %A
        %tmp2 = load <8 x i16>* %B
        %tmp3 = and <8 x i16> %tmp1, %tmp2
-       %tmp4 = vicmp ne <8 x i16> %tmp3, zeroinitializer
-       ret <8 x i16> %tmp4
+       %tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
+        %tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
+       ret <8 x i16> %tmp5
 }
 
 define <4 x i32> @vtstQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
        %tmp1 = load <4 x i32>* %A
        %tmp2 = load <4 x i32>* %B
        %tmp3 = and <4 x i32> %tmp1, %tmp2
-       %tmp4 = vicmp ne <4 x i32> %tmp3, zeroinitializer
-       ret <4 x i32> %tmp4
+       %tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
+        %tmp5 = sext <4 x i1> %tmp4 to <4 x i32>
+       ret <4 x i32> %tmp5
 }