Skip to content

[LoongArch] Unable to constrain instruction placement when using the large code model #163681

@wangleiat

Description

@wangleiat
@.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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions