[llvm] Reland "[Support] Assert that DomTree nodes share parent"" (PR #102782)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 13 08:08:03 PDT 2024


fhahn wrote:

The below now crashes with `opt -passes='default<O3>'`

```
; ModuleID = 'reduced.ll'
source_filename = "reduced.ll"
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "arm64-apple-macosx"

%struct.widget = type { %struct.baz, i8, [7 x i8] }
%struct.baz = type { %struct.snork }
%struct.snork = type { [8 x i8] }

define void @spam(ptr %arg) {
bb:
  call void @barney(ptr %arg)
  ret void
}

define ptr @zot(ptr %arg) {
bb:
  %call = call ptr @ham.8(ptr %arg)
  ret ptr null
}

define void @wombat() personality ptr null {
bb:
  call void @snork()
  unreachable
}

define ptr @wombat.1(ptr %arg) {
bb:
  %call = call ptr @foo.9(ptr %arg)
  ret ptr null
}

define void @quux() personality ptr null {
bb:
  call void @wobble()
  ret void
}

define void @wobble() personality ptr null {
bb:
  call void @quux.3()
  ret void
}

define void @eggs() personality ptr null {
bb:
  %alloca = alloca %struct.widget, align 8
  br label %bb1

bb1:                                              ; preds = %bb1, %bb
  call void @spam(ptr %alloca)
  %call = call ptr @zot(ptr %alloca)
  br label %bb1
}

define void @wobble.2() personality ptr null {
bb:
  call void @wibble(ptr null)
  ret void
}

define void @quux.3() personality ptr null {
bb:
  call void @wobble.2()
  ret void
}

define void @zot.4() personality ptr null {
bb:
  call void @blam()
  ret void
}

define void @blam() {
bb:
  %load = load volatile i32, ptr null, align 4
  %icmp = icmp eq i32 %load, 0
  br i1 %icmp, label %bb2, label %bb3

bb1:                                              ; preds = %bb3, %bb2
  ret void

bb2:                                              ; preds = %bb
  call void @eggs()
  br label %bb1

bb3:                                              ; preds = %bb
  call void @quux()
  br label %bb1
}

define void @barney(ptr %arg) personality ptr null {
bb:
  %load = load volatile i1, ptr null, align 1
  br i1 %load, label %bb2, label %bb3

bb1:                                              ; preds = %bb3, %bb2
  ret void

bb2:                                              ; preds = %bb
  %call = call ptr @wombat.1(ptr %arg)
  br label %bb1

bb3:                                              ; preds = %bb
  call void @zot.4()
  br label %bb1
}

define void @snork() personality ptr null {
bb:
  call void @barney(ptr null)
  ret void
}

define void @wibble(ptr %arg) personality ptr null {
bb:
  %load = load volatile i1, ptr null, align 1
  br i1 %load, label %bb2, label %bb3

bb1:                                              ; preds = %bb3, %bb2
  ret void

bb2:                                              ; preds = %bb
  %call = call i64 @zot.5(i64 0)
  %inttoptr = inttoptr i64 %call to ptr
  store ptr %inttoptr, ptr %arg, align 8
  br label %bb1

bb3:                                              ; preds = %bb
  %call4 = call i64 @foo()
  br label %bb1
}

define i64 @zot.5(i64 %arg) {
bb:
  ret i64 %arg
}

define i64 @foo() {
bb:
  call void @wombat()
  ret i64 0
}

define ptr @ham(ptr %arg) {
bb:
  %call = call ptr @foo.7(ptr %arg)
  ret ptr null
}

define void @quux.6(ptr %arg) {
bb:
  %load = load ptr, ptr %arg, align 8
  store ptr null, ptr %arg, align 8
  store i32 0, ptr %load, align 4
  ret void
}

define ptr @foo.7(ptr %arg) {
bb:
  call void @quux.6(ptr %arg)
  ret ptr null
}

define ptr @ham.8(ptr %arg) personality ptr null {
bb:
  %call = call ptr @ham(ptr %arg)
  ret ptr null
}

define ptr @foo.9(ptr %arg) {
bb:
  store i64 1, ptr %arg, align 8
  ret ptr null
}
```

https://github.com/llvm/llvm-project/pull/102782


More information about the llvm-commits mailing list