Issue 163681
Summary [LoongArch] Unable to constrain instruction placement when using the large code model
Labels new issue
Assignees
Reporter wangleiat
    ```llvm
@.str = external hidden unnamed_addr constant [1 x i8], align 1

declare void @callee1(ptr, i64, ptr, i32 signext)
declare void @callee2(ptr, i64, ptr, i32 signext)
declare void @callee3(ptr, ptr, i32 signext)

define dso_local void @caller(ptr %0) {
 %2 = icmp eq ptr %0, null
  br i1 %2, label %17, label %3

3: ; preds = %1
  %4 = getelementptr inbounds nuw i8, ptr %0, i64 16
  %5 = load i32, ptr %4, align 8
  %6 = icmp eq i32 %5, 0
  br i1 %6, label %7, label %16

7: ; preds = %3
  %8 = getelementptr inbounds nuw i8, ptr %0, i64 20
  %9 = load i32, ptr %8, align 4
  %10 = icmp eq i32 %9, 0
  %11 = load ptr, ptr %0, align 8
  %12 = getelementptr inbounds nuw i8, ptr %0, i64 40
 %13 = load i64, ptr %12, align 8
  br i1 %10, label %15, label %14

14: ; preds = %7
  tail call void @callee1(ptr %11, i64 %13, ptr @.str, i32 signext 0)
  br label %16

15: ; preds = %7
  tail call void @callee2(ptr %11, i64 %13, ptr @.str, i32 signext 0)
  br label %16

16: ; preds = %15, %14, %3
  tail call void @callee3(ptr %0, ptr @.str, i32 signext 0)
  br label %17

17: ; preds = %16, %1
  ret void
}
```
```
llc -mtriple=loongarch64 -code-model=large xxx.ll
```
`LoongArchInstrInfo::isSchedulingBoundary` cannot constrain the instruction movement performed by the `branch-folder` pass.

By the way, it also cannot constrain instruction movement in the `post-RA scheduler`.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to