forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 103
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PPCMergeStringPool] Only replace constant once (llvm#92996)
In llvm#88846 I changed this code to use RAUW to perform the replacement instead of manual updates -- but kept the outer loop, which means we try to perform RAUW once per user. However, some of the users might be freed by the RAUW operation, resulting in use-after-free. The case where this happens is constant users where the replacement might result in the destruction of the original constant. Fixes llvm#92991. (cherry picked from commit 9f85bc8)
- Loading branch information
Showing
2 changed files
with
27 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
llvm/test/CodeGen/PowerPC/mergeable-string-pool-pr92991.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 | ||
; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s | ||
|
||
@g = private constant [4 x i32] [i32 122, i32 67, i32 35, i32 56] | ||
@g2 = private constant [1 x i64] [i64 1], align 8 | ||
|
||
define void @test(ptr %p, ptr %p2) { | ||
; CHECK-LABEL: test: | ||
; CHECK: # %bb.0: | ||
; CHECK-NEXT: addis 5, 2, .L__ModuleStringPool@toc@ha | ||
; CHECK-NEXT: addi 5, 5, .L__ModuleStringPool@toc@l | ||
; CHECK-NEXT: addi 6, 5, 12 | ||
; CHECK-NEXT: std 6, 0(3) | ||
; CHECK-NEXT: addi 3, 5, 16 | ||
; CHECK-NEXT: std 3, 0(4) | ||
; CHECK-NEXT: blr | ||
store ptr getelementptr inbounds ([4 x i32], ptr @g, i64 0, i64 1), ptr %p | ||
store ptr getelementptr inbounds ([4 x i32], ptr @g, i64 0, i64 2), ptr %p2 | ||
ret void | ||
} |