summaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/LoongArch
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/LoongArch')
-rw-r--r--llvm/test/CodeGen/LoongArch/issue163681.ll56
1 files changed, 56 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/LoongArch/issue163681.ll b/llvm/test/CodeGen/LoongArch/issue163681.ll
new file mode 100644
index 000000000000..f6df34925304
--- /dev/null
+++ b/llvm/test/CodeGen/LoongArch/issue163681.ll
@@ -0,0 +1,56 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc --mtriple=loongarch64 -code-model=large --verify-machineinstrs < %s \
+; RUN: | FileCheck %s
+
+@.str = external constant [1 x i8]
+
+define void @caller(ptr %0) {
+; CHECK-LABEL: caller:
+; CHECK: # %bb.0:
+; CHECK-NEXT: addi.d $sp, $sp, -16
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
+; CHECK-NEXT: .cfi_offset 1, -8
+; CHECK-NEXT: ld.w $a2, $zero, 0
+; CHECK-NEXT: ld.d $a1, $a0, 0
+; CHECK-NEXT: beqz $a2, .LBB0_2
+; CHECK-NEXT: # %bb.1:
+; CHECK-NEXT: pcalau12i $a0, %got_pc_hi20(.str)
+; CHECK-NEXT: addi.d $a2, $zero, %got_pc_lo12(.str)
+; CHECK-NEXT: lu32i.d $a2, %got64_pc_lo20(.str)
+; CHECK-NEXT: lu52i.d $a2, $a2, %got64_pc_hi12(.str)
+; CHECK-NEXT: ldx.d $a2, $a2, $a0
+; CHECK-NEXT: move $a0, $zero
+; CHECK-NEXT: jirl $ra, $zero, 0
+; CHECK-NEXT: b .LBB0_3
+; CHECK-NEXT: .LBB0_2:
+; CHECK-NEXT: pcalau12i $a0, %got_pc_hi20(.str)
+; CHECK-NEXT: addi.d $a2, $zero, %got_pc_lo12(.str)
+; CHECK-NEXT: lu32i.d $a2, %got64_pc_lo20(.str)
+; CHECK-NEXT: lu52i.d $a2, $a2, %got64_pc_hi12(.str)
+; CHECK-NEXT: ldx.d $a2, $a2, $a0
+; CHECK-NEXT: move $a0, $zero
+; CHECK-NEXT: move $a3, $zero
+; CHECK-NEXT: jirl $ra, $zero, 0
+; CHECK-NEXT: .LBB0_3:
+; CHECK-NEXT: st.d $zero, $zero, 0
+; CHECK-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
+; CHECK-NEXT: addi.d $sp, $sp, 16
+; CHECK-NEXT: ret
+ %2 = load i32, ptr null, align 4
+ %3 = icmp eq i32 %2, 0
+ %4 = load i64, ptr %0, align 8
+ br i1 %3, label %6, label %5
+
+5: ; preds = %1
+ call void null(ptr null, i64 %4, ptr @.str)
+ br label %7
+
+6: ; preds = %1
+ tail call void null(ptr null, i64 %4, ptr @.str, i32 0)
+ br label %7
+
+7: ; preds = %6, %5
+ store ptr null, ptr null, align 8
+ ret void
+}