diff options
author | Vedant Kumar <vsk@apple.com> | 2019-11-14 13:11:34 -0800 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2020-01-10 14:30:52 -0800 |
commit | a9052b4dfc1b25bd58480668d221365495fa9101 (patch) | |
tree | babac2558e87d0ffe67b34eca8edb02a520811ed /llvm/lib/Target | |
parent | 7c47a3719a9e587fdf993637dc09d97b5397483b (diff) | |
download | bcm5719-llvm-a9052b4dfc1b25bd58480668d221365495fa9101.tar.gz bcm5719-llvm-a9052b4dfc1b25bd58480668d221365495fa9101.zip |
[AArch64] Add isAuthenticated predicate to MCInstDesc
Add a predicate to MCInstDesc that allows tools to determine whether an
instruction authenticates a pointer. This can be used by diagnostic
tools to hint at pointer authentication failures.
Differential Revision: https://reviews.llvm.org/D70329
rdar://55089604
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrFormats.td | 2 | ||||
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrInfo.td | 18 |
2 files changed, 14 insertions, 6 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64InstrFormats.td b/llvm/lib/Target/AArch64/AArch64InstrFormats.td index e9cacbf739e..b22fc160d5d 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrFormats.td +++ b/llvm/lib/Target/AArch64/AArch64InstrFormats.td @@ -1483,6 +1483,7 @@ class RCPCLoad<bits<2> sz, string asm, RegisterClass RC> class AuthBase<bits<1> M, dag oops, dag iops, string asm, string operands, list<dag> pattern> : I<oops, iops, asm, operands, "", pattern>, Sched<[]> { + let isAuthenticated = 1; let Inst{31-25} = 0b1101011; let Inst{20-11} = 0b1111100001; let Inst{10} = M; @@ -1522,6 +1523,7 @@ class BaseAuthLoad<bit M, bit W, dag oops, dag iops, string asm, bits<10> offset; bits<5> Rn; bits<5> Rt; + let isAuthenticated = 1; let Inst{31-24} = 0b11111000; let Inst{23} = M; let Inst{22} = offset{9}; diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td index f4d340c9f06..1fff8d78af0 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td @@ -819,20 +819,26 @@ let Predicates = [HasComplxNum, HasNEON] in { let Uses = [LR], Defs = [LR] in { def PACIAZ : SystemNoOperands<0b000, "paciaz">; def PACIBZ : SystemNoOperands<0b010, "pacibz">; - def AUTIAZ : SystemNoOperands<0b100, "autiaz">; - def AUTIBZ : SystemNoOperands<0b110, "autibz">; + let isAuthenticated = 1 in { + def AUTIAZ : SystemNoOperands<0b100, "autiaz">; + def AUTIBZ : SystemNoOperands<0b110, "autibz">; + } } let Uses = [LR, SP], Defs = [LR] in { def PACIASP : SystemNoOperands<0b001, "paciasp">; def PACIBSP : SystemNoOperands<0b011, "pacibsp">; - def AUTIASP : SystemNoOperands<0b101, "autiasp">; - def AUTIBSP : SystemNoOperands<0b111, "autibsp">; + let isAuthenticated = 1 in { + def AUTIASP : SystemNoOperands<0b101, "autiasp">; + def AUTIBSP : SystemNoOperands<0b111, "autibsp">; + } } let Uses = [X16, X17], Defs = [X17], CRm = 0b0001 in { def PACIA1716 : SystemNoOperands<0b000, "pacia1716">; def PACIB1716 : SystemNoOperands<0b010, "pacib1716">; - def AUTIA1716 : SystemNoOperands<0b100, "autia1716">; - def AUTIB1716 : SystemNoOperands<0b110, "autib1716">; + let isAuthenticated = 1 in { + def AUTIA1716 : SystemNoOperands<0b100, "autia1716">; + def AUTIB1716 : SystemNoOperands<0b110, "autib1716">; + } } let Uses = [LR], Defs = [LR], CRm = 0b0000 in { |