diff options
author | Tony Varghese <tonypalampalliyil@gmail.com> | 2025-10-15 10:58:42 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-10-15 10:58:42 +0530 |
commit | d83fe1201e9d91da192d9292fea1a65579086e04 (patch) | |
tree | 461be0ef354123c5889a633c7852c48ba59a8506 /clang/lib/Serialization/ModuleCache.cpp | |
parent | 60ee515b8cc2f14d548d7e0a20f44434a237f22b (diff) | |
download | llvm-d83fe1201e9d91da192d9292fea1a65579086e04.zip llvm-d83fe1201e9d91da192d9292fea1a65579086e04.tar.gz llvm-d83fe1201e9d91da192d9292fea1a65579086e04.tar.bz2 |
[PowerPC] Exploit xxeval instruction for operations of the form ternary(A, X, nor(B,C)), ternary(A, X, eqv(B,C)), ternary(A, X, nand(B,C)), ternary(A, X, not(B)) and ternary(A, X, not(C)) (#158096)
Adds support for ternary equivalent operations of the form `ternary(A,
X, nor(B,C))`, `ternary(A, X, eqv(B,C))`, `ternary(A, X, nand(B,C))`,
`ternary(A, X, not(B))` and `ternary(A, X, not(C))` where `X=[xor(B,C)|
nor(B,C)| eqv(B,C)| not(B)| not(C)| and(B,C)| nand(B,C)]`.
This adds support for `v4i32, v2i64, v16i8, v8i16` operand types for the
following patterns.
List of xxeval equivalent ternary operations added and the corresponding
imm value required:
```
ternary(A, and(B,C), nor(B,C)) 129
ternary(A, B, nor(B,C)) 131
ternary(A, C, nor(B,C)) 133
ternary(A, xor(B,C), nor(B,C)) 134
ternary(A, not(C), nor(B,C)) 138
ternary(A, not(B), nor(B,C)) 140
ternary(A, nand(B,C), nor(B,C)) 142
ternary(A, or(B,C), eqv(B,C)) 151
ternary(A, nor(B,C), eqv(B,C)) 152
ternary(A, not(C), eqv(B,C)) 154
ternary(A, nand(B,C), eqv(B,C)) 158
ternary(A, and(B,C), not(C)) 161
ternary(A, B, not(C)) 163
ternary(A, xor(B,C), not(C)) 166
ternary(A, or(B,C), not(C)) 167
ternary(A, not(B), not(C)) 172
ternary(A, nand(B,C), not(C)) 174
ternary(A, and(B,C), not(B)) 193
ternary(A, xor(B,C), not(B)) 198
ternary(A, or(B,C), not(B)) 199
ternary(A, nand(B,C), not(B)) 206
ternary(A, B, nand(B,C)) 227
ternary(A, C, nand(B,C)) 229
ternary(A, xor(B,C), nand(B,C)) 230
ternary(A, or(B,C), nand(B,C)) 231
ternary(A, eqv(B,C), nand(B,C)) 233
```
eg. `xxeval XT, XA, XB, XC, 129`
performs the ternary operation: `XA ? and(XB, XC) : nor(XB, XC)` and
places the result in `XT`.
This is the continuation of:
- [[PowerPC] Exploit xxeval instruction for ternary patterns -
ternary(A, X,
and(B,C))](https://github.com/llvm/llvm-project/pull/141733#top)
- [[PowerPC] Exploit xxeval instruction for operations of the form
ternary(A,X,B) and
ternary(A,X,C).](https://github.com/llvm/llvm-project/pull/152956#top)
- [[PowerPC] Exploit xxeval instruction for operations of the form
ternary(A,X, XOR(B,C)) and ternary(A,X,
OR(B,C))](https://github.com/llvm/llvm-project/pull/157909#top)
Co-authored-by: Tony Varghese <tony.varghese@ibm.com>
Diffstat (limited to 'clang/lib/Serialization/ModuleCache.cpp')
0 files changed, 0 insertions, 0 deletions