[clang] [LTO] A static relocation model can override the PIC level wrt treating external address as directly accessible (PR #65512)
Simon Pilgrim via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 13 08:42:58 PDT 2023
================
@@ -0,0 +1,38 @@
+; Check that we do not generate an extra indirection accessing the stack guard
+; variable, when the relocation model is static.
+;
+; RUN: llvm-as < %s > %t.bc
+; RUN: llvm-lto -O0 -relocation-model=static -o %t.o %t.bc
+; RUN: llvm-objdump -d -r %t.o | FileCheck %s
+
+target triple = "armv4t-unknown-unknown"
+
+define arm_aapcscc i8 @foo() #0 {
+entry:
+ %arr = alloca [200 x i8], align 1
+ call void @llvm.memset.p0.i32(ptr align 1 %arr, i8 0, i32 200, i1 false)
+ %arrayidx = getelementptr inbounds [200 x i8], ptr %arr, i32 0, i8 5
+ %0 = load i8, ptr %arrayidx, align 1
+ ret i8 %0
+}
+
+; CHECK: <foo>:
+; CHECK: [[#%x,CURPC:]]:{{.*}} ldr r[[REG1:[0-9]+]], [pc, #0x[[#%x,OFFSET:]]]
+; CHECK-NEXT: ldr r[[REG2:[0-9]+]], [r[[REG1]]]
+; CHECK-NEXT: str r[[REG2]],
+; CHECK: [[#CURPC + OFFSET + 8]]:{{.*}}.word
+; CHECK-NEXT: R_ARM_ABS32 __stack_chk_guard
+
+declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)
----------------
RKSimon wrote:
Is it worth pre-committing this test so that the patch shows the codegen fix?
https://github.com/llvm/llvm-project/pull/65512
More information about the cfe-commits
mailing list