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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to