Rather than cleanup up dead constant expressions as we go along, do this once at the end. This aligns it with the CleanupConstantGlobalUsers() implementation and avoids any invalidation issues. Fixes https://github.com/llvm/llvm-project/issues/61674.
22 lines
876 B
LLVM
22 lines
876 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
|
|
; RUN: opt -S -passes=globalopt < %s | FileCheck %s
|
|
|
|
; Test handling of dead constant expressions in CleanupPointerRootUsers().
|
|
|
|
@g = internal global [2 x [1 x [6 x ptr]]] zeroinitializer
|
|
|
|
define void @test() {
|
|
; CHECK-LABEL: define void @test() local_unnamed_addr {
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store ptr null, ptr getelementptr inbounds ([2 x [1 x [6 x ptr]]], ptr @g, i32 0, i32 1), align 1
|
|
ret void
|
|
|
|
dead:
|
|
zext i1 icmp ne (ptr getelementptr inbounds ([2 x [1 x [6 x ptr]]], ptr @g, i32 0, i32 1), ptr getelementptr inbounds ([6 x ptr], ptr getelementptr inbounds ([2 x [1 x [6 x ptr]]], ptr @g, i32 0, i32 1), i32 0, i32 5)) to i16
|
|
ret void
|
|
}
|
|
|
|
; uselistorder directives
|
|
uselistorder ptr getelementptr inbounds ([2 x [1 x [6 x ptr]]], ptr @g, i32 0, i32 1), { 1, 2, 0 }
|