
This change is to support target extension types in vectors. The change allows sized target extension types to opt-in to being a valid vector element. Allowing target extension types as vector elements will allow backends to use vector operations such as `insertelement` and `extractelement` on their target types with minimal changes. RFC: https://discourse.llvm.org/t/rfc-supporting-sized-target-extension-types-in-vector/86431
21 lines
1.4 KiB
LLVM
21 lines
1.4 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: opt -passes=verify -S %s | FileCheck %s
|
|
|
|
define <2 x target("llvm.test.vectorelement")> @vec_ops(<2 x target("llvm.test.vectorelement")> %x) {
|
|
; CHECK-LABEL: define <2 x target("llvm.test.vectorelement")> @vec_ops(
|
|
; CHECK-SAME: <2 x target("llvm.test.vectorelement")> [[X:%.*]]) {
|
|
; CHECK-NEXT: [[A:%.*]] = alloca <2 x target("llvm.test.vectorelement")>{{.*}}
|
|
; CHECK-NEXT: store <2 x target("llvm.test.vectorelement")> [[X]], ptr [[A]], {{.*}}
|
|
; CHECK-NEXT: [[LOAD:%.*]] = load <2 x target("llvm.test.vectorelement")>, ptr [[A]], {{.*}}
|
|
; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x target("llvm.test.vectorelement")> [[LOAD]], i64 0
|
|
; CHECK-NEXT: [[RES:%.*]] = insertelement <2 x target("llvm.test.vectorelement")> poison, target("llvm.test.vectorelement") [[ELT]], i64 1
|
|
; CHECK-NEXT: ret <2 x target("llvm.test.vectorelement")> [[RES]]
|
|
;
|
|
%a = alloca <2 x target("llvm.test.vectorelement")>
|
|
store <2 x target("llvm.test.vectorelement")> %x, ptr %a
|
|
%load = load <2 x target("llvm.test.vectorelement")>, ptr %a
|
|
%elt = extractelement <2 x target("llvm.test.vectorelement")> %load, i64 0
|
|
%res = insertelement <2 x target("llvm.test.vectorelement")> poison, target("llvm.test.vectorelement") %elt, i64 1
|
|
ret <2 x target("llvm.test.vectorelement")> %res
|
|
}
|