From 7c026a83ee903f00cb0a2827519ccd6f16b6ed03 Mon Sep 17 00:00:00 2001 From: Jonas Paulsson Date: Fri, 23 Oct 2020 20:45:54 +0200 Subject: [PATCH] [SystemZ] Define MaxInstLength to have the value of 6. This value had the default value of 4 which caused branch relaxation to fail. Review: Ulrich Weigand Differential Revision: https://reviews.llvm.org/D90065 --- .../SystemZ/MCTargetDesc/SystemZMCAsmInfo.cpp | 2 ++ llvm/test/CodeGen/SystemZ/Large/branch-range-13.py | 41 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 llvm/test/CodeGen/SystemZ/Large/branch-range-13.py diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmInfo.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmInfo.cpp index e540ff4..76df8cf 100644 --- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmInfo.cpp +++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmInfo.cpp @@ -17,6 +17,8 @@ SystemZMCAsmInfo::SystemZMCAsmInfo(const Triple &TT) { CalleeSaveStackSlotSize = 8; IsLittleEndian = false; + MaxInstLength = 6; + CommentString = "#"; ZeroDirective = "\t.space\t"; Data64bitsDirective = "\t.quad\t"; diff --git a/llvm/test/CodeGen/SystemZ/Large/branch-range-13.py b/llvm/test/CodeGen/SystemZ/Large/branch-range-13.py new file mode 100644 index 0000000..13543a7 --- /dev/null +++ b/llvm/test/CodeGen/SystemZ/Large/branch-range-13.py @@ -0,0 +1,41 @@ +# Test that inline assembly get the right size value so that a branch across +# a block containing them gets relaxed. + +# RUN: python %s | llc -mtriple=s390x-linux-gnu -mcpu=z196 -enable-post-misched=false \ +# RUN: | FileCheck %s + +# Construct: +# +# entry: +# branch to block +# +# block: +# sequence of call asm +# unconditional branch to block +# +# exit: +# ret void + +# CHECK-LABEL: f1 +# CHECK: jg +# CHECK-NEXT: .Lfunc_end0: + +from __future__ import print_function + +num = 11000 + +print('define void @f1() {') +print('entry:') +print(' br label %block') +print('') +print('block:') + +for i in range(num): + print(' tail call i64 asm "lang\\09$0,$2,$1\\0A", "=d,=*Q,d,*Q"(i32* undef, i32 undef, i32* undef)') + +print(' br label %block') + +print('') +print('exit:') +print(' ret void') +print('}') -- 2.7.4