Comments (6)
Should new operations be created for vector types? Or should the existing ops be reused?
I am guessing new ops are needed, since the semantics for some operations, especially the relational operators, are quite different for vectors than for scalars.
from clangir.
https://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors has some useful information about Clang's support for vector types. There are five different kinds of vector types: GCC, OpenCL, Arm NEON, Arm SVE, and AltiVec. I believe that all except for SVE can share the same ClangIR vector type with an element type and a size. The Arm SVE vector types are different and will need their own ClcangIR type because they don't have a compile-time size.
from clangir.
I am rethinking having separate CIR types for fixed-sized vectors and scalable vectors. Base MLIR has one meta-type for both (which also covers multidimensional arrays). But I'll figure that out later. Right now I'm implementing fixed-sized vector types. Once that is mostly working I'll decide what to do about scalable types.
from clangir.
When PR #531 is merged, I will resolve this issue, since GNU vector types support will be complete. I have created separate issues to implement other kinds of vectors: #532, #533, #534, and #535.
from clangir.
Should new operations be created for vector types? Or should the existing ops be reused?
This is a very relevant question!
I am guessing new ops are needed, since the semantics for some operations, especially the relational operators, are quite different for vectors than for scalars.
Right, similar to the std::simd
drama with ==
and others. My take here:
BinOp
already exists and isn't constrained to any type just yet (operands areAnyType
). I'd say we reuse it for vector types because it only considers arith and logical operations, so at CIR level semantics are probably good enough. If along the way we find reasons to create specific ones, we incrementally work on those.CmpOp
is where the difference shines, I'd say we create new ops for these. We should also change the operation constraints forCmpOp
to disallow types other than scalars.- All other vector specific relevant things (shuffle, reduce, etc) should have their own ops too (meaning, we could lower intrinsics/builtins directly to them).
from clangir.
Sounds good, looks like both SVE & RISC-V V have that property. Perhaps when we get there we should generalize the vector types to use ShapedType
trait, like memref
and tensor
do. So we could have a cir.vec<?xf32>
type.
from clangir.
Related Issues (20)
- Add CIRGen and LowerToLLVM support for remaining pointer arithmetic extensions for C HOT 2
- Change ops to be consistent in their MLIR ASM style HOT 3
- Miss destruction in switch statements HOT 4
- Module verification error of switch statements HOT 3
- AArch64 specific builtins/intrinsics HOT 3
- Debug info support
- Move more logic from MergeCleanups into Op::fold methods HOT 6
- Add switch support for GNU range HOT 1
- Use the canonicalizer pass for the new operations in CIR (with workaround sharing) HOT 2
- Enhance the extensibility of TargetCIRGenInfo to support more targets HOT 1
- Incorrect terminator generation HOT 3
- Fix InitListExpr for OpenCL vectors HOT 4
- [Documentation] Encode rules for skeleton, asserts, unrecheable, testing, etc HOT 1
- Pass explicit alignment to globals
- LLVM IR dialect already supports zeroinitializer, get rid of `ZeroInitConstOp` HOT 2
- Case gnu range need to be improved HOT 4
- Add an CIR analysis-only pipeline that uses traditional codegen HOT 6
- Can we create a LoweringHelpers for LowerCIRToMLIR similar to ToLLVM? HOT 1
- Not completely implemented `CIRGenTypes::getRecordTypeName` HOT 10
- Implement a custom CIR Module Op and attributes HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from clangir.