| OLD | NEW |
| 1 ; Show that we know how to translate veor vector instructions. | 1 ; Show that we know how to translate veor vector instructions. |
| 2 | 2 |
| 3 ; REQUIRES: allow_dump | 3 ; REQUIRES: allow_dump |
| 4 | 4 |
| 5 ; Compile using standalone assembler. | 5 ; Compile using standalone assembler. |
| 6 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -O2 \ | 6 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -O2 \ |
| 7 ; RUN: | FileCheck %s --check-prefix=ASM | 7 ; RUN: | FileCheck %s --check-prefix=ASM |
| 8 | 8 |
| 9 ; Show bytes in assembled standalone code. | 9 ; Show bytes in assembled standalone code. |
| 10 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \ | 10 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \ |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 define internal <4 x i32> @testVxor4i32(<4 x i32> %v1, <4 x i32> %v2) { | 23 define internal <4 x i32> @testVxor4i32(<4 x i32> %v1, <4 x i32> %v2) { |
| 24 ; ASM-LABEL: testVxor4i32: | 24 ; ASM-LABEL: testVxor4i32: |
| 25 ; DIS-LABEL: 00000000 <testVxor4i32>: | 25 ; DIS-LABEL: 00000000 <testVxor4i32>: |
| 26 ; IASM-LABEL: testVxor4i32: | 26 ; IASM-LABEL: testVxor4i32: |
| 27 | 27 |
| 28 entry: | 28 entry: |
| 29 %res = xor <4 x i32> %v1, %v2 | 29 %res = xor <4 x i32> %v1, %v2 |
| 30 | 30 |
| 31 ; ASM: veor.i32 q0, q0, q1 | 31 ; ASM: veor.i32 q0, q0, q1 |
| 32 ; DIS: 0: f3000152 | 32 ; DIS: 0: f3000152 |
| 33 ; IASM: veor.i32 | 33 ; IASM-NOT: veor.i32 |
| 34 | 34 |
| 35 ret <4 x i32> %res | 35 ret <4 x i32> %res |
| 36 } | 36 } |
| 37 | 37 |
| 38 define internal <8 x i16> @testVxor8i16(<8 x i16> %v1, <8 x i16> %v2) { | 38 define internal <8 x i16> @testVxor8i16(<8 x i16> %v1, <8 x i16> %v2) { |
| 39 ; ASM-LABEL: testVxor8i16: | 39 ; ASM-LABEL: testVxor8i16: |
| 40 ; DIS-LABEL: 00000010 <testVxor8i16>: | 40 ; DIS-LABEL: 00000010 <testVxor8i16>: |
| 41 ; IASM-LABEL: testVxor8i16: | 41 ; IASM-LABEL: testVxor8i16: |
| 42 | 42 |
| 43 entry: | 43 entry: |
| 44 %res = xor <8 x i16> %v1, %v2 | 44 %res = xor <8 x i16> %v1, %v2 |
| 45 | 45 |
| 46 ; ASM: veor.i16 q0, q0, q1 | 46 ; ASM: veor.i16 q0, q0, q1 |
| 47 ; DIS: 10: f3000152 | 47 ; DIS: 10: f3000152 |
| 48 ; IASM: veor.i16 | 48 ; IASM-NOT: veor.i16 |
| 49 | 49 |
| 50 ret <8 x i16> %res | 50 ret <8 x i16> %res |
| 51 } | 51 } |
| 52 | 52 |
| 53 define internal <16 x i8> @testVxor16i8(<16 x i8> %v1, <16 x i8> %v2) { | 53 define internal <16 x i8> @testVxor16i8(<16 x i8> %v1, <16 x i8> %v2) { |
| 54 ; ASM-LABEL: testVxor16i8: | 54 ; ASM-LABEL: testVxor16i8: |
| 55 ; DIS-LABEL: 00000020 <testVxor16i8>: | 55 ; DIS-LABEL: 00000020 <testVxor16i8>: |
| 56 ; IASM-LABEL: testVxor16i8: | 56 ; IASM-LABEL: testVxor16i8: |
| 57 | 57 |
| 58 entry: | 58 entry: |
| 59 %res = xor <16 x i8> %v1, %v2 | 59 %res = xor <16 x i8> %v1, %v2 |
| 60 | 60 |
| 61 ; ASM: veor.i8 q0, q0, q1 | 61 ; ASM: veor.i8 q0, q0, q1 |
| 62 ; DIS: 20: f3000152 | 62 ; DIS: 20: f3000152 |
| 63 ; IASM: veor.i8 | 63 ; IASM-NOT: veor.i8 |
| 64 | 64 |
| 65 ret <16 x i8> %res | 65 ret <16 x i8> %res |
| 66 } | 66 } |
| 67 | 67 |
| 68 ;; | 68 ;; |
| 69 ;; The following tests make sure logical xor works on predicate vectors. | 69 ;; The following tests make sure logical xor works on predicate vectors. |
| 70 ;; | 70 ;; |
| 71 | 71 |
| 72 define internal <4 x i1> @testVxor4i1(<4 x i1> %v1, <4 x i1> %v2) { | 72 define internal <4 x i1> @testVxor4i1(<4 x i1> %v1, <4 x i1> %v2) { |
| 73 ; ASM-LABEL: testVxor4i1: | 73 ; ASM-LABEL: testVxor4i1: |
| 74 ; DIS-LABEL: 00000030 <testVxor4i1>: | 74 ; DIS-LABEL: 00000030 <testVxor4i1>: |
| 75 ; IASM-LABEL: testVxor4i1: | 75 ; IASM-LABEL: testVxor4i1: |
| 76 | 76 |
| 77 entry: | 77 entry: |
| 78 %res = xor <4 x i1> %v1, %v2 | 78 %res = xor <4 x i1> %v1, %v2 |
| 79 | 79 |
| 80 ; ASM: veor.i32 q0, q0, q1 | 80 ; ASM: veor.i32 q0, q0, q1 |
| 81 ; DIS: 30: f3000152 | 81 ; DIS: 30: f3000152 |
| 82 ; IASM: veor.i32 | 82 ; IASM-NOT: veor.i32 |
| 83 | 83 |
| 84 ret <4 x i1> %res | 84 ret <4 x i1> %res |
| 85 } | 85 } |
| 86 | 86 |
| 87 define internal <8 x i1> @testVxor8i1(<8 x i1> %v1, <8 x i1> %v2) { | 87 define internal <8 x i1> @testVxor8i1(<8 x i1> %v1, <8 x i1> %v2) { |
| 88 ; ASM-LABEL: testVxor8i1: | 88 ; ASM-LABEL: testVxor8i1: |
| 89 ; DIS-LABEL: 00000040 <testVxor8i1>: | 89 ; DIS-LABEL: 00000040 <testVxor8i1>: |
| 90 ; IASM-LABEL: testVxor8i1: | 90 ; IASM-LABEL: testVxor8i1: |
| 91 | 91 |
| 92 entry: | 92 entry: |
| 93 %res = xor <8 x i1> %v1, %v2 | 93 %res = xor <8 x i1> %v1, %v2 |
| 94 | 94 |
| 95 ; ASM: veor.i16 q0, q0, q1 | 95 ; ASM: veor.i16 q0, q0, q1 |
| 96 ; DIS: 40: f3000152 | 96 ; DIS: 40: f3000152 |
| 97 ; IASM: veor.i16 | 97 ; IASM-NOT: veor.i16 |
| 98 | 98 |
| 99 ret <8 x i1> %res | 99 ret <8 x i1> %res |
| 100 } | 100 } |
| 101 | 101 |
| 102 define internal <16 x i1> @testVxor16i1(<16 x i1> %v1, <16 x i1> %v2) { | 102 define internal <16 x i1> @testVxor16i1(<16 x i1> %v1, <16 x i1> %v2) { |
| 103 ; ASM-LABEL: testVxor16i1: | 103 ; ASM-LABEL: testVxor16i1: |
| 104 ; DIS-LABEL: 00000050 <testVxor16i1>: | 104 ; DIS-LABEL: 00000050 <testVxor16i1>: |
| 105 ; IASM-LABEL: testVxor16i1: | 105 ; IASM-LABEL: testVxor16i1: |
| 106 | 106 |
| 107 entry: | 107 entry: |
| 108 %res = xor <16 x i1> %v1, %v2 | 108 %res = xor <16 x i1> %v1, %v2 |
| 109 | 109 |
| 110 ; ASM: veor.i8 q0, q0, q1 | 110 ; ASM: veor.i8 q0, q0, q1 |
| 111 ; DIS: 50: f3000152 | 111 ; DIS: 50: f3000152 |
| 112 ; IASM: veor.i8 | 112 ; IASM-NOT: veor.i8 |
| 113 | 113 |
| 114 ret <16 x i1> %res | 114 ret <16 x i1> %res |
| 115 } | 115 } |
| OLD | NEW |