brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · b38aa37 Raw
171 lines · plain
1# RUN: split-file %s %t2# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcilb %t/pass.s -o - \3# RUN:   | llvm-objdump -dr -M no-aliases - --mattr=+experimental-xqcilb | FileCheck %s4# RUN: not llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcilb %t/fail.s \5# RUN:   2>&1 | FileCheck %t/fail.s --check-prefix=ERROR6 7## This testcase shows how `c.j`, `c.jal` and `jal` can be relaxed to `qc.e.j` and `qc.e.jal`8## with Xqcilb, when the branches are out of range, but also that these can be compressed9## when referencing close labels.10 11## The only problem we have here is when `jal` references an out-of-range label, and `rd` is12## not `x0` or `x1` - for which we have no equivalent sequence, so we just fail to relax, and13## emit a fixup-value-out-of-range error.14 15#--- pass.s16 17EXT_JUMP_NEGATIVE:18  c.nop19.space 0x10000020 21FAR_JUMP_NEGATIVE:22  c.nop23.space 0x100024 25NEAR_NEGATIVE:26  c.nop27 28start:29  c.j NEAR30# CHECK: c.j {{0x[0-9a-f]+}} <NEAR>31  c.j NEAR_NEGATIVE32# CHECK: c.j {{0x[0-9a-f]+}} <NEAR_NEGATIVE>33  c.j FAR_JUMP34# CHECK: jal zero, {{0x[0-9a-f]+}} <FAR_JUMP>35  c.j FAR_JUMP_NEGATIVE36# CHECK: jal zero, {{0x[0-9a-f]+}} <FAR_JUMP_NEGATIVE>37  c.j EXT_JUMP38# CHECK: qc.e.j {{0x[0-9a-f]+}} <EXT_JUMP>39  c.j EXT_JUMP_NEGATIVE40# CHECK: qc.e.j {{0x[0-9a-f]+}} <EXT_JUMP_NEGATIVE>41  c.j undef42# CHECK: qc.e.j {{0x[0-9a-f]+}} <start+{{0x[0-9a-f]+}}>43# CHECK: R_RISCV_CUSTOM195 undef44 45  c.jal NEAR46# CHECK: c.jal {{0x[0-9a-f]+}} <NEAR>47  c.jal NEAR_NEGATIVE48# CHECK: c.jal {{0x[0-9a-f]+}} <NEAR_NEGATIVE>49  c.jal FAR_JUMP50# CHECK: jal ra, {{0x[0-9a-f]+}} <FAR_JUMP>51  c.jal FAR_JUMP_NEGATIVE52# CHECK: jal ra, {{0x[0-9a-f]+}} <FAR_JUMP_NEGATIVE>53  c.jal EXT_JUMP54# CHECK: qc.e.jal {{0x[0-9a-f]+}} <EXT_JUMP>55  c.jal EXT_JUMP_NEGATIVE56# CHECK: qc.e.jal {{0x[0-9a-f]+}} <EXT_JUMP_NEGATIVE>57  c.jal undef58# CHECK: qc.e.jal {{0x[0-9a-f]+}} <start+{{0x[0-9a-f]+}}>59# CHECK: R_RISCV_CUSTOM195 undef60 61  jal zero, NEAR62# CHECK: c.j {{0x[0-9a-f]+}} <NEAR>63  jal zero, NEAR_NEGATIVE64# CHECK: c.j {{0x[0-9a-f]+}} <NEAR_NEGATIVE>65  jal zero, FAR_JUMP66# CHECK: jal zero, {{0x[0-9a-f]+}} <FAR_JUMP>67  jal zero, FAR_JUMP_NEGATIVE68# CHECK: jal zero, {{0x[0-9a-f]+}} <FAR_JUMP_NEGATIVE>69  jal zero, EXT_JUMP70# CHECK: qc.e.j {{0x[0-9a-f]+}} <EXT_JUMP>71  jal zero, EXT_JUMP_NEGATIVE72# CHECK: qc.e.j {{0x[0-9a-f]+}} <EXT_JUMP_NEGATIVE>73  jal zero, undef74# CHECK: qc.e.j {{0x[0-9a-f]+}} <start+{{0x[0-9a-f]+}}>75# CHECK: R_RISCV_CUSTOM195 undef76 77  jal ra, NEAR78# CHECK: c.jal {{0x[0-9a-f]+}} <NEAR>79  jal ra, NEAR_NEGATIVE80# CHECK: c.jal {{0x[0-9a-f]+}} <NEAR_NEGATIVE>81  jal ra, FAR_JUMP82# CHECK: jal ra, {{0x[0-9a-f]+}} <FAR_JUMP>83  jal ra, FAR_JUMP_NEGATIVE84# CHECK: jal ra, {{0x[0-9a-f]+}} <FAR_JUMP_NEGATIVE>85  jal ra, EXT_JUMP86# CHECK: qc.e.jal {{0x[0-9a-f]+}} <EXT_JUMP>87  jal ra, EXT_JUMP_NEGATIVE88# CHECK: qc.e.jal {{0x[0-9a-f]+}} <EXT_JUMP_NEGATIVE>89  jal ra, undef90# CHECK: qc.e.jal {{0x[0-9a-f]+}} <start+{{0x[0-9a-f]+}}>91# CHECK: R_RISCV_CUSTOM195 undef92 93  qc.e.j NEAR94# CHECK: c.j {{0x[0-9a-f]+}} <NEAR>95  qc.e.j NEAR_NEGATIVE96# CHECK: c.j {{0x[0-9a-f]+}} <NEAR_NEGATIVE>97  qc.e.j FAR_JUMP98# CHECK: jal zero, {{0x[0-9a-f]+}} <FAR_JUMP>99  qc.e.j FAR_JUMP_NEGATIVE100# CHECK: jal zero, {{0x[0-9a-f]+}} <FAR_JUMP_NEGATIVE>101  qc.e.j EXT_JUMP102# CHECK: qc.e.j {{0x[0-9a-f]+}} <EXT_JUMP>103  qc.e.j EXT_JUMP_NEGATIVE104# CHECK: qc.e.j {{0x[0-9a-f]+}} <EXT_JUMP_NEGATIVE>105  qc.e.j undef106# CHECK: qc.e.j {{0x[0-9a-f]+}} <start+{{0x[0-9a-f]+}}>107# CHECK: R_RISCV_CUSTOM195 undef108 109  qc.e.jal NEAR110# CHECK: c.jal {{0x[0-9a-f]+}} <NEAR>111  qc.e.jal NEAR_NEGATIVE112# CHECK: c.jal {{0x[0-9a-f]+}} <NEAR_NEGATIVE>113  qc.e.jal FAR_JUMP114# CHECK: jal ra, {{0x[0-9a-f]+}} <FAR_JUMP>115  qc.e.jal FAR_JUMP_NEGATIVE116# CHECK: jal ra, {{0x[0-9a-f]+}} <FAR_JUMP_NEGATIVE>117  qc.e.jal EXT_JUMP118# CHECK: qc.e.jal {{0x[0-9a-f]+}} <EXT_JUMP>119  qc.e.jal EXT_JUMP_NEGATIVE120# CHECK: qc.e.jal {{0x[0-9a-f]+}} <EXT_JUMP_NEGATIVE>121  qc.e.jal undef122# CHECK: qc.e.jal {{0x[0-9a-f]+}} <start+{{0x[0-9a-f]+}}>123# CHECK: R_RISCV_CUSTOM195 undef124 125 126 127  jal t1, NEAR128# CHECK: jal t1, {{0x[0-9a-f]+}} <NEAR>129  jal t1, NEAR_NEGATIVE130# CHECK: jal t1, {{0x[0-9a-f]+}} <NEAR_NEGATIVE>131  jal t1, FAR_JUMP132# CHECK: jal t1, {{0x[0-9a-f]+}} <FAR_JUMP>133  jal t1, FAR_JUMP_NEGATIVE134# CHECK: jal t1, {{0x[0-9a-f]+}} <FAR_JUMP_NEGATIVE>135 136## The two cases with EXT_JUMP and EXT_JUMP_NEGATIVE are137## in fail.s, below.138 139  jal t1, undef140# CHECK: jal t1, {{0x[0-9a-f]+}} <start+{{0x[0-9a-f]+}}>141# CHECK: R_RISCV_JAL undef142 143 144NEAR:145  c.nop146.space 0x1000147FAR_JUMP:148  c.nop149.space 0x100000150EXT_JUMP:151  c.nop152 153 154#--- fail.s155 156 157EXT_JUMP_NEGATIVE:158  c.nop159.space 0x100000160.space 0x1000161 162  jal t1, EXT_JUMP163# ERROR: [[@LINE-1]]:11: error: fixup value out of range164  jal t1, EXT_JUMP_NEGATIVE165# ERROR: [[@LINE-1]]:11: error: fixup value out of range166 167.space 0x1000168.space 0x100000169EXT_JUMP:170  c.nop171