| 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