summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>2015-03-12 11:13:40 +0000
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>2015-03-12 11:13:40 +0000
commitf4252e723d153fa103a07e86408b33bb11b117c2 (patch)
treee1fd6dd4742f53eb6fd1cebe3df42285af729330
parentb7b4b66a5efa64caca570af16be1f0318a90d0a8 (diff)
downloadgcc-f4252e723d153fa103a07e86408b33bb11b117c2.tar.gz
S/390: Hotpatching fixes.
2015-03-02 Dominik Vogt <vogt@linux.vnet.ibm.com> * config/s390/s390.c (s390_reorg): Move code to output nops after label to s390_reorg (). (s390_asm_output_function_label): Likewise. * config/s390/s390.c (s390_asm_output_function_label): Fix function label alignment with -mhtopatch. * config/s390/s390.md ("unspecv"): New values UNSPECV_NOP_2_BYTE, UNSPECV_NOP_4_BYTE and UNSPECV_NOP_6_BYTE ("nop_2_byte"): New define_insn. ("nop_4_byte"): Likewise. ("nop_6_byte"): Likewise. * doc/extend.texi (hotpatch): hotpatch attribute doc fixes. * doc/invoke.texi (-mhotpatch): -mhotpatch doc fixes. 2015-03-02 Dominik Vogt <vogt@linux.vnet.ibm.com> * gcc.target/s390/hotpatch-21.c: New test for hotpatch alignment. * gcc.target/s390/hotpatch-22.c: Likewise. * gcc.target/s390/hotpatch-23.c: Likewise. * gcc.target/s390/hotpatch-24.c: Likewise. * gcc.target/s390/hotpatch-2.c: Also check hotpatch alignment. * gcc.target/s390/hotpatch-1.c: Update expected output. * gcc.target/s390/hotpatch-2.c: Likewise. * gcc.target/s390/hotpatch-3.c: Likewise. * gcc.target/s390/hotpatch-4.c: Likewise. * gcc.target/s390/hotpatch-5.c: Likewise. * gcc.target/s390/hotpatch-6.c: Likewise. * gcc.target/s390/hotpatch-7.c: Likewise. * gcc.target/s390/hotpatch-8.c: Likewise. * gcc.target/s390/hotpatch-9.c: Likewise. * gcc.target/s390/hotpatch-10.c: Likewise. * gcc.target/s390/hotpatch-11.c: Likewise. * gcc.target/s390/hotpatch-12.c: Likewise. * gcc.target/s390/hotpatch-13.c: Likewise. * gcc.target/s390/hotpatch-14.c: Likewise. * gcc.target/s390/hotpatch-15.c: Likewise. * gcc.target/s390/hotpatch-16.c: Likewise. * gcc.target/s390/hotpatch-17.c: Likewise. * gcc.target/s390/hotpatch-18.c: Likewise. * gcc.target/s390/hotpatch-19.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221381 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/config/s390/s390.c66
-rw-r--r--gcc/config/s390/s390.md25
-rw-r--r--gcc/doc/invoke.texi4
-rw-r--r--gcc/testsuite/ChangeLog27
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-1.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-10.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-11.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-12.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-13.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-14.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-15.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-16.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-17.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-18.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-19.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-2.c3
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-21.c14
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-22.c14
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-23.c14
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-24.c14
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-3.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-4.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-5.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-6.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-7.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-8.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/hotpatch-9.c2
28 files changed, 186 insertions, 46 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 43d67175732..59009989120 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,18 @@
+2015-03-12 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ * config/s390/s390.c (s390_reorg): Move code to output nops after label
+ to s390_reorg ().
+ (s390_asm_output_function_label): Likewise.
+ * config/s390/s390.c (s390_asm_output_function_label):
+ Fix function label alignment with -mhtopatch.
+ * config/s390/s390.md ("unspecv"): New values UNSPECV_NOP_2_BYTE,
+ UNSPECV_NOP_4_BYTE and UNSPECV_NOP_6_BYTE
+ ("nop_2_byte"): New define_insn.
+ ("nop_4_byte"): Likewise.
+ ("nop_6_byte"): Likewise.
+ * doc/extend.texi (hotpatch): hotpatch attribute doc fixes.
+ * doc/invoke.texi (-mhotpatch): -mhotpatch doc fixes.
+
2015-03-12 Ilya Enkovich <ilya.enkovich@intel.com>
PR target/65103
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 593c0cc8ee2..d2b87046b3a 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -5295,6 +5295,7 @@ s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
if (hotpatch_p)
{
+ unsigned int function_alignment;
int i;
/* Add a trampoline code area before the function label and initialize it
@@ -5308,34 +5309,14 @@ s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
stored directly before the label without crossing a cacheline
boundary. All this is necessary to make sure the trampoline code can
be changed atomically. */
+ function_alignment = MAX (8, DECL_ALIGN (decl) / BITS_PER_UNIT);
+ if (! DECL_USER_ALIGN (decl))
+ function_alignment = MAX (function_alignment,
+ (unsigned int) align_functions);
+ ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (function_alignment));
}
ASM_OUTPUT_LABEL (asm_out_file, fname);
-
- /* Output a series of NOPs after the function label. */
- if (hotpatch_p)
- {
- while (hw_after > 0)
- {
- if (hw_after >= 3 && TARGET_CPU_ZARCH)
- {
- asm_fprintf (asm_out_file, "\tbrcl\t\t0,0\n");
- hw_after -= 3;
- }
- else if (hw_after >= 2)
- {
- gcc_assert (hw_after == 2 || !TARGET_CPU_ZARCH);
- asm_fprintf (asm_out_file, "\tnop\t0\n");
- hw_after -= 2;
- }
- else
- {
- gcc_assert (hw_after == 1);
- asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
- hw_after -= 1;
- }
- }
- }
}
/* Output machine-dependent UNSPECs occurring in address constant X
@@ -11368,6 +11349,7 @@ static void
s390_reorg (void)
{
bool pool_overflow = false;
+ int hw_before, hw_after;
/* Make sure all splits have been performed; splits after
machine_dependent_reorg might confuse insn length counts. */
@@ -11503,6 +11485,40 @@ s390_reorg (void)
if (insn_added_p)
shorten_branches (get_insns ());
}
+
+ s390_function_num_hotpatch_hw (current_function_decl, &hw_before, &hw_after);
+ if (hw_after > 0)
+ {
+ rtx_insn *insn;
+
+ /* Inject nops for hotpatching. */
+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+ {
+ if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG)
+ break;
+ }
+ gcc_assert (insn);
+ /* Output a series of NOPs after the NOTE_INSN_FUNCTION_BEG. */
+ while (hw_after > 0)
+ {
+ if (hw_after >= 3 && TARGET_CPU_ZARCH)
+ {
+ insn = emit_insn_after (gen_nop_6_byte (), insn);
+ hw_after -= 3;
+ }
+ else if (hw_after >= 2)
+ {
+ insn = emit_insn_after (gen_nop_4_byte (), insn);
+ hw_after -= 2;
+ }
+ else
+ {
+ insn = emit_insn_after (gen_nop_2_byte (), insn);
+ hw_after -= 1;
+ }
+ }
+ gcc_assert (hw_after == 0);
+ }
}
/* Return true if INSN is a fp load insn writing register REGNO. */
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index bf698b1cf81..76dca0a68ae 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -153,6 +153,11 @@
UNSPECV_CAS
UNSPECV_ATOMIC_OP
+ ; Hotpatching (unremovable NOPs)
+ UNSPECV_NOP_2_BYTE
+ UNSPECV_NOP_4_BYTE
+ UNSPECV_NOP_6_BYTE
+
; Transactional Execution support
UNSPECV_TBEGIN
UNSPECV_TBEGIN_TDB
@@ -9705,6 +9710,26 @@
"lr\t1,1"
[(set_attr "op_type" "RR")])
+;;- Undeletable nops (used for hotpatching)
+
+(define_insn "nop_2_byte"
+ [(unspec_volatile [(const_int 0)] UNSPECV_NOP_2_BYTE)]
+ ""
+ "nopr\t%%r7"
+ [(set_attr "op_type" "RR")])
+
+(define_insn "nop_4_byte"
+ [(unspec_volatile [(const_int 0)] UNSPECV_NOP_4_BYTE)]
+ ""
+ "nop\t0"
+ [(set_attr "op_type" "RX")])
+
+(define_insn "nop_6_byte"
+ [(unspec_volatile [(const_int 0)] UNSPECV_NOP_6_BYTE)]
+ "TARGET_CPU_ZARCH"
+ "brcl\t0, 0"
+ [(set_attr "op_type" "RIL")])
+
;
; Special literal pool access instruction pattern(s).
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 1534ed93b3d..08ce074c260 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -20216,9 +20216,9 @@ The @var{stack-guard} option can only be used in conjunction with @var{stack-siz
If the hotpatch option is enabled, a ``hot-patching'' function
prologue is generated for all functions in the compilation unit.
The funtion label is prepended with the given number of two-byte
-Nop instructions (@var{pre-halfwords}, maximum 1000000). After
+NOP instructions (@var{pre-halfwords}, maximum 1000000). After
the label, 2 * @var{post-halfwords} bytes are appended, using the
-larges nop like instructions the architecture allows (maximum
+largest NOP like instructions the architecture allows (maximum
1000000).
If both arguments are zero, hotpatching is disabled.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4bd7f0e7211..baf5f426f5c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,30 @@
+2015-03-12 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ * gcc.target/s390/hotpatch-21.c: New test for hotpatch alignment.
+ * gcc.target/s390/hotpatch-22.c: Likewise.
+ * gcc.target/s390/hotpatch-23.c: Likewise.
+ * gcc.target/s390/hotpatch-24.c: Likewise.
+ * gcc.target/s390/hotpatch-2.c: Also check hotpatch alignment.
+ * gcc.target/s390/hotpatch-1.c: Update expected output.
+ * gcc.target/s390/hotpatch-2.c: Likewise.
+ * gcc.target/s390/hotpatch-3.c: Likewise.
+ * gcc.target/s390/hotpatch-4.c: Likewise.
+ * gcc.target/s390/hotpatch-5.c: Likewise.
+ * gcc.target/s390/hotpatch-6.c: Likewise.
+ * gcc.target/s390/hotpatch-7.c: Likewise.
+ * gcc.target/s390/hotpatch-8.c: Likewise.
+ * gcc.target/s390/hotpatch-9.c: Likewise.
+ * gcc.target/s390/hotpatch-10.c: Likewise.
+ * gcc.target/s390/hotpatch-11.c: Likewise.
+ * gcc.target/s390/hotpatch-12.c: Likewise.
+ * gcc.target/s390/hotpatch-13.c: Likewise.
+ * gcc.target/s390/hotpatch-14.c: Likewise.
+ * gcc.target/s390/hotpatch-15.c: Likewise.
+ * gcc.target/s390/hotpatch-16.c: Likewise.
+ * gcc.target/s390/hotpatch-17.c: Likewise.
+ * gcc.target/s390/hotpatch-18.c: Likewise.
+ * gcc.target/s390/hotpatch-19.c: Likewise.
+
2015-03-12 Ilya Enkovich <ilya.enkovich@intel.com>
PR target/65103
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-1.c b/gcc/testsuite/gcc.target/s390/hotpatch-1.c
index 61d8f39f52a..4e29817991e 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-1.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-1.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-10.c b/gcc/testsuite/gcc.target/s390/hotpatch-10.c
index 1097ab437bb..352c9d500d7 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-10.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-10.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-11.c b/gcc/testsuite/gcc.target/s390/hotpatch-11.c
index be08acc7922..beb8738c653 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-11.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-11.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-12.c b/gcc/testsuite/gcc.target/s390/hotpatch-12.c
index 6e909c0ec48..d109478b04f 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-12.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-12.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 999 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-13.c b/gcc/testsuite/gcc.target/s390/hotpatch-13.c
index 959789cf13d..9ac9f842d63 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-13.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-13.c
@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-14.c b/gcc/testsuite/gcc.target/s390/hotpatch-14.c
index 0f1f41f2502..209e4ac5e47 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-14.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-14.c
@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-15.c b/gcc/testsuite/gcc.target/s390/hotpatch-15.c
index e3064953c32..109034ef019 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-15.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-15.c
@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-16.c b/gcc/testsuite/gcc.target/s390/hotpatch-16.c
index 66f13fe3c5c..b01c1c32254 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-16.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-16.c
@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-17.c b/gcc/testsuite/gcc.target/s390/hotpatch-17.c
index b301c5cd294..ce0b950f8d3 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-17.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-17.c
@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-18.c b/gcc/testsuite/gcc.target/s390/hotpatch-18.c
index 1c06783f4bc..9a24d5e6a77 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-18.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-18.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-19.c b/gcc/testsuite/gcc.target/s390/hotpatch-19.c
index a1ec9c76c8b..3586da29a89 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-19.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-19.c
@@ -20,4 +20,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-2.c b/gcc/testsuite/gcc.target/s390/hotpatch-2.c
index 0c82a5a966c..18be5aa2383 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-2.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-2.c
@@ -13,4 +13,5 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-times "\.align\t8" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-21.c b/gcc/testsuite/gcc.target/s390/hotpatch-21.c
new file mode 100644
index 00000000000..d72dee318cf
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-21.c
@@ -0,0 +1,14 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0,1" } */
+
+#include <stdio.h>
+
+void __attribute__ ((aligned(512))) hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "\.align\t512" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-22.c b/gcc/testsuite/gcc.target/s390/hotpatch-22.c
new file mode 100644
index 00000000000..65074661023
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-22.c
@@ -0,0 +1,14 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0,1 -falign-functions=1024" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "\.align\t1024" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-23.c b/gcc/testsuite/gcc.target/s390/hotpatch-23.c
new file mode 100644
index 00000000000..7dce5b8b0fa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-23.c
@@ -0,0 +1,14 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0,1 -falign-functions=4096" } */
+
+#include <stdio.h>
+
+void __attribute__ ((aligned(2048))) hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "\.align\t2048" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-24.c b/gcc/testsuite/gcc.target/s390/hotpatch-24.c
new file mode 100644
index 00000000000..4d6815cb516
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-24.c
@@ -0,0 +1,14 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0,1 -falign-functions=2048" } */
+
+#include <stdio.h>
+
+void __attribute__ ((aligned(4096))) hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "\.align\t4096" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-3.c b/gcc/testsuite/gcc.target/s390/hotpatch-3.c
index 041ef9ce83c..8a2ab538e8d 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-3.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-3.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-4.c b/gcc/testsuite/gcc.target/s390/hotpatch-4.c
index 050a0651406..9a69459797e 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-4.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-4.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-times "brcl\t\t0,0" 1 } } */
+/* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-5.c b/gcc/testsuite/gcc.target/s390/hotpatch-5.c
index 785dba7066f..b3d990f499a 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-5.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-5.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-times "brcl\t\t0,0" 1 } } */
+/* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-6.c b/gcc/testsuite/gcc.target/s390/hotpatch-6.c
index da96e4368af..10ba5580b0d 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-6.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-6.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
-/* { dg-final { scan-assembler-times "brcl\t\t0,0" 1 } } */
+/* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-7.c b/gcc/testsuite/gcc.target/s390/hotpatch-7.c
index b7c19d7d6fe..edf67d3e22e 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-7.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-7.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */
-/* { dg-final { scan-assembler-times "brcl\t\t0,0" 2 } } */
+/* { dg-final { scan-assembler-times "brcl\t0, 0" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-8.c b/gcc/testsuite/gcc.target/s390/hotpatch-8.c
index 25edd9b0ed2..a179c4a633c 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-8.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-8.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-9.c b/gcc/testsuite/gcc.target/s390/hotpatch-9.c
index 2143f9d4280..c4e21f2d3de 100644
--- a/gcc/testsuite/gcc.target/s390/hotpatch-9.c
+++ b/gcc/testsuite/gcc.target/s390/hotpatch-9.c
@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-times "nop\t0" 2 } } */
-/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */