| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc -mtriple=aarch64 -mattr=+neon < %s | FileCheck %s |
| |
| define <16 x i8> @test_tbx1_zero_splat(<16 x i8> %tbl, <16 x i8> %idx) { |
| ; CHECK-LABEL: test_tbx1_zero_splat: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: tbl v0.16b, { v0.16b }, v1.16b |
| ; CHECK-NEXT: ret |
| %res = call <16 x i8> @llvm.aarch64.neon.tbx1.v16i8(<16 x i8> zeroinitializer, <16 x i8> %tbl, <16 x i8> %idx) |
| ret <16 x i8> %res |
| } |
| |
| define <16 x i8> @test_tbx2_zero_splat(<16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %idx) { |
| ; CHECK-LABEL: test_tbx2_zero_splat: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1 |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1 |
| ; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b |
| ; CHECK-NEXT: ret |
| %res = call <16 x i8> @llvm.aarch64.neon.tbx2.v16i8(<16 x i8> zeroinitializer, <16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %idx) |
| ret <16 x i8> %res |
| } |
| |
| define <16 x i8> @test_tbx3_zero_splat(<16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %tbl3, <16 x i8> %idx) { |
| ; CHECK-LABEL: test_tbx3_zero_splat: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2 |
| ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2 |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2 |
| ; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b, v2.16b }, v3.16b |
| ; CHECK-NEXT: ret |
| %res = call <16 x i8> @llvm.aarch64.neon.tbx3.v16i8(<16 x i8> zeroinitializer, <16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %tbl3, <16 x i8> %idx) |
| ret <16 x i8> %res |
| } |
| |
| define <16 x i8> @test_tbx4_zero_splat(<16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %tbl3, <16 x i8> %tbl4, <16 x i8> %idx) { |
| ; CHECK-LABEL: test_tbx4_zero_splat: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3 |
| ; CHECK-NEXT: // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3 |
| ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3 |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3 |
| ; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b, v2.16b, v3.16b }, v4.16b |
| ; CHECK-NEXT: ret |
| %res = call <16 x i8> @llvm.aarch64.neon.tbx4.v16i8(<16 x i8> zeroinitializer, <16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %tbl3, <16 x i8> %tbl4, <16 x i8> %idx) |
| ret <16 x i8> %res |
| } |
| define <8 x i8> @test_tbx1_zero_splat_8x8(<16 x i8> %tbl, <8 x i8> %idx) { |
| ; CHECK-LABEL: test_tbx1_zero_splat_8x8: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: tbl v0.8b, { v0.16b }, v1.8b |
| ; CHECK-NEXT: ret |
| %res = call <8 x i8> @llvm.aarch64.neon.tbx1.v8i8(<8 x i8> zeroinitializer, <16 x i8> %tbl, <8 x i8> %idx) |
| ret <8 x i8> %res |
| } |
| |
| define <8 x i8> @test_tbx2_zero_splat_8x8(<16 x i8> %tbl1, <16 x i8> %tbl2, <8 x i8> %idx) { |
| ; CHECK-LABEL: test_tbx2_zero_splat_8x8: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1 |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1 |
| ; CHECK-NEXT: tbl v0.8b, { v0.16b, v1.16b }, v2.8b |
| ; CHECK-NEXT: ret |
| %res = call <8 x i8> @llvm.aarch64.neon.tbx2.v8i8(<8 x i8> zeroinitializer, <16 x i8> %tbl1, <16 x i8> %tbl2, <8 x i8> %idx) |
| ret <8 x i8> %res |
| } |
| |
| define <8 x i8> @test_tbx3_zero_splat_8x8(<16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %tbl3, <8 x i8> %idx) { |
| ; CHECK-LABEL: test_tbx3_zero_splat_8x8: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2 |
| ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2 |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2 |
| ; CHECK-NEXT: tbl v0.8b, { v0.16b, v1.16b, v2.16b }, v3.8b |
| ; CHECK-NEXT: ret |
| %res = call <8 x i8> @llvm.aarch64.neon.tbx3.v8i8(<8 x i8> zeroinitializer, <16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %tbl3, <8 x i8> %idx) |
| ret <8 x i8> %res |
| } |
| |
| define <8 x i8> @test_tbx4_zero_splat_8x8(<16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %tbl3, <16 x i8> %tbl4, <8 x i8> %idx) { |
| ; CHECK-LABEL: test_tbx4_zero_splat_8x8: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3 |
| ; CHECK-NEXT: // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3 |
| ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3 |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3 |
| ; CHECK-NEXT: tbl v0.8b, { v0.16b, v1.16b, v2.16b, v3.16b }, v4.8b |
| ; CHECK-NEXT: ret |
| %res = call <8 x i8> @llvm.aarch64.neon.tbx4.v8i8(<8 x i8> zeroinitializer, <16 x i8> %tbl1, <16 x i8> %tbl2, <16 x i8> %tbl3, <16 x i8> %tbl4, <8 x i8> %idx) |
| ret <8 x i8> %res |
| } |
| |