shchenz added inline comments.
================
Comment at: clang/test/CodeGen/PowerPC/builtins-ppc-stackprotect.c:11
+// RUN: FileCheck %s
+// RUN: %clang_cc1 -O2 -triple powerpc64-unknown-aix \
+// RUN: -emit-llvm %s -o - -target-cpu pwr7 | \
----------------
nit: do we need -O2?
================
Comment at: llvm/lib/Target/PowerPC/PPCISelLowering.cpp:10702
+
+ // If SafeStack or !StackProtector, kill_canary is not supported.
+ if (MF.getFunction().hasFnAttribute(Attribute::SafeStack) ||
----------------
Is it possible to handle this when we generate `Intrinsic::ppc_kill_canary`,
for example in the FE? Passing and handling this useless intrinsic in all the
opt passes should be avoided?
================
Comment at: llvm/lib/Target/PowerPC/PPCISelLowering.cpp:10718
+ // before corruption, so we XOR the canary word with all 1 bits.
+ const uint64_t XORWord = 0xFFFFFFFFFFFFFFFF;
+
----------------
nit: we may don't need this magic number here, we can use
`DAG.getAllOnesConstant()` when we generate the `XOR` below?
================
Comment at: llvm/test/CodeGen/PowerPC/kill-canary-intrinsic.ll:5
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux \
+; RUN: --ppc-asm-full-reg-names < %s | FileCheck %s -check-prefix=LINUX
+
----------------
+1, we should add a RUN line for 64bit Linux LE for
`-mtriple=powerpc64le-unknown-linux-gnu`
and for 32-bit AIX too.
================
Comment at: llvm/test/CodeGen/PowerPC/kill-canary-intrinsic.ll:21
+
+attributes #0 = { sspreq }
+; Function Attrs: sspreq
----------------
nit: we may can add `nounwind` attribute to the function to remove the
unnecessary `cfi` related instructions in the test.
================
Comment at: llvm/test/CodeGen/PowerPC/kill-canary-intrinsic.ll:34
+; AIX-NEXT: not r4, r4
+; AIX-NEXT: std r4, 0(r3)
+; AIX-NEXT: ld r3, 0(r3)
----------------
The functionality here seems wrong, AFAIK, we should overwrite the content in
the slack slot instead of the data csect. Which means the store here should be
`std r4, 120(r1)` instead of `std r4, 0(r3)`. Stack protection aims to check
that the stack content is not changed unexpectedly.
================
Comment at: llvm/test/CodeGen/PowerPC/kill-canary-intrinsic.ll:59
+; LINUX-NEXT: not r3, r3
+; LINUX-NEXT: std r3, 120(r1)
+; LINUX-NEXT: ld r3, 120(r1)
----------------
Linux seems right...
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D129016/new/
https://reviews.llvm.org/D129016
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits