0021-Fix-INSN-costing-and-more-zicond-tests.patch 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984
  1. From 84cb63829b5b224c4c0b0f6236f894dad7e4550c Mon Sep 17 00:00:00 2001
  2. From: Xiao Zeng <zengxiao@eswincomputing.com>
  3. Date: Fri, 29 Sep 2023 16:29:02 -0600
  4. Subject: [PATCH 21/30] Fix INSN costing and more zicond tests
  5. So this ends up looking a lot like the bits that I had to revert several
  6. weeks
  7. ago :-)
  8. The core issue we have is given an INSN the generic code will cost the
  9. SET_SRC
  10. and SET_DEST and sum them. But that's far from ideal on a RISC target.
  11. For a register destination, the cost can be determined be looking at
  12. just the
  13. SET_SRC. Which is precisely what this patch does. When the outer code
  14. is an
  15. INSN and we're presented with a SET we take one of two paths.
  16. If the destination is a register, then we recurse just on the SET_SRC
  17. and we're
  18. done. Otherwise we fall back to the existing code which sums the cost
  19. of the
  20. SET_SRC and SET_DEST. That fallback path isn't great and probably could
  21. be
  22. further improved (just costing SET_DEST in that case is probably quite
  23. reasonable).
  24. The difference between this version and the bits that slipped through by
  25. accident several weeks ago is that old version mis-used the API due to a
  26. thinko
  27. on my part.
  28. This tightens up various zicond tests to avoid undesirable matching.
  29. This has been tested on rv64gc -- the only difference it makes on the
  30. testsuite
  31. is the new tests (included in this patch) flip from failing to passing.
  32. Pushed to the trunk.
  33. gcc/
  34. * config/riscv/riscv.cc (riscv_rtx_costs): Better handle costing
  35. SETs when the outer code is INSN.
  36. gcc/testsuite
  37. * gcc.target/riscv/zicond-primitiveSemantics_compare_imm.c: New
  38. test.
  39. *
  40. gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_0_imm.c:
  41. Likewise.
  42. *
  43. gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_imm.c:
  44. Likewise.
  45. *
  46. gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_reg.c:
  47. Likewise.
  48. *
  49. gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_reg_reg.c:
  50. Likewise.
  51. * gcc.target/riscv/zicond-primitiveSemantics_compare_reg.c:
  52. Likewise.
  53. *
  54. gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_0_imm.c:
  55. Likewise.
  56. *
  57. gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_imm.c:
  58. Likewise.
  59. *
  60. gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_reg.c:
  61. Likewise.
  62. *
  63. gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_reg_reg.c:
  64. Likewise.
  65. * gcc.target/riscv/zicond-primitiveSemantics.c: Tighten expected
  66. regexp.
  67. * gcc.target/riscv/zicond-primitiveSemantics_return_0_imm.c:
  68. Likewise.
  69. * gcc.target/riscv/zicond-primitiveSemantics_return_imm_imm.c:
  70. Likewise.
  71. * gcc.target/riscv/zicond-primitiveSemantics_return_imm_reg.c:
  72. Likewise.
  73. * gcc.target/riscv/zicond-primitiveSemantics_return_reg_reg.c:
  74. Likewise.
  75. * gcc.target/riscv/zicond-xor-01.c: Likewise.
  76. gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_0_imm.c
  77. gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_imm.c
  78. gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_reg.c
  79. gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_reg_reg.c
  80. ---
  81. gcc/config/riscv/riscv.cc | 13 ++++
  82. .../riscv/zicond-primitiveSemantics.c | 8 +-
  83. .../zicond-primitiveSemantics_compare_imm.c | 57 ++++++++++++++
  84. ...mitiveSemantics_compare_imm_return_0_imm.c | 73 ++++++++++++++++++
  85. ...tiveSemantics_compare_imm_return_imm_imm.c | 73 ++++++++++++++++++
  86. ...tiveSemantics_compare_imm_return_imm_reg.c | 65 ++++++++++++++++
  87. ...tiveSemantics_compare_imm_return_reg_reg.c | 65 ++++++++++++++++
  88. .../zicond-primitiveSemantics_compare_reg.c | 65 ++++++++++++++++
  89. ...mitiveSemantics_compare_reg_return_0_imm.c | 73 ++++++++++++++++++
  90. ...tiveSemantics_compare_reg_return_imm_imm.c | 73 ++++++++++++++++++
  91. ...tiveSemantics_compare_reg_return_imm_reg.c | 65 ++++++++++++++++
  92. ...tiveSemantics_compare_reg_return_reg_reg.c | 77 +++++++++++++++++++
  93. .../zicond-primitiveSemantics_return_0_imm.c | 8 +-
  94. ...zicond-primitiveSemantics_return_imm_imm.c | 8 +-
  95. ...zicond-primitiveSemantics_return_imm_reg.c | 8 +-
  96. ...zicond-primitiveSemantics_return_reg_reg.c | 8 +-
  97. .../gcc.target/riscv/zicond-xor-01.c | 2 +-
  98. 17 files changed, 720 insertions(+), 21 deletions(-)
  99. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm.c
  100. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_0_imm.c
  101. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_imm.c
  102. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_reg.c
  103. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_reg_reg.c
  104. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg.c
  105. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_0_imm.c
  106. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_imm.c
  107. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_reg.c
  108. create mode 100644 gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_reg_reg.c
  109. diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
  110. index 14be2d7654a..c11223475eb 100644
  111. --- a/gcc/config/riscv/riscv.cc
  112. +++ b/gcc/config/riscv/riscv.cc
  113. @@ -2280,6 +2280,19 @@ riscv_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UN
  114. switch (GET_CODE (x))
  115. {
  116. + case SET:
  117. + /* If we are called for an INSN that's a simple set of a register,
  118. + then cost based on the SET_SRC alone. */
  119. + if (outer_code == INSN && REG_P (SET_DEST (x)))
  120. + {
  121. + riscv_rtx_costs (SET_SRC (x), mode, outer_code, opno, total, speed);
  122. + return true;
  123. + }
  124. +
  125. + /* Otherwise return FALSE indicating we should recurse into both the
  126. + SET_DEST and SET_SRC combining the cost of both. */
  127. + return false;
  128. +
  129. case CONST_INT:
  130. if (riscv_immediate_operand_p (outer_code, INTVAL (x)))
  131. {
  132. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics.c
  133. index 47d4e4c5683..276dac70852 100644
  134. --- a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics.c
  135. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics.c
  136. @@ -43,7 +43,7 @@ int primitiveSemantics_11(int a, int b) {
  137. return b;
  138. }
  139. -/* { dg-final { scan-assembler-times "czero.eqz" 6 } } */
  140. -/* { dg-final { scan-assembler-times "czero.nez" 6 } } */
  141. -/* { dg-final { scan-assembler-not "beq" } } */
  142. -/* { dg-final { scan-assembler-not "bne" } } */
  143. +/* { dg-final { scan-assembler-times {\mczero\.eqz\M} 6 } } */
  144. +/* { dg-final { scan-assembler-times {\mczero\.nez\M} 6 } } */
  145. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  146. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  147. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm.c
  148. new file mode 100644
  149. index 00000000000..a53a908ff25
  150. --- /dev/null
  151. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm.c
  152. @@ -0,0 +1,57 @@
  153. +/* { dg-do compile } */
  154. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  155. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  156. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  157. +
  158. +long primitiveSemantics_compare_imm_00(long a, long b) {
  159. + return a == 2 ? 0 : b;
  160. +}
  161. +
  162. +long primitiveSemantics_compare_imm_01(long a, long b) {
  163. + return a != 2 ? 0 : b;
  164. +}
  165. +
  166. +long primitiveSemantics_compare_imm_02(long a, long b) {
  167. + return a == 2 ? b : 0;
  168. +}
  169. +
  170. +long primitiveSemantics_compare_imm_03(long a, long b) {
  171. + return a != 2 ? b : 0;
  172. +}
  173. +
  174. +long primitiveSemantics_compare_imm_04(long a, long b) {
  175. + if (a == 2)
  176. + b = 0;
  177. + return b;
  178. +}
  179. +
  180. +long primitiveSemantics_compare_imm_05(long a, long b) {
  181. + if (!(a == 2))
  182. + b = 0;
  183. + return b;
  184. +}
  185. +
  186. +int primitiveSemantics_compare_imm_06(int a, int b) { return a == 2 ? 0 : b; }
  187. +
  188. +int primitiveSemantics_compare_imm_07(int a, int b) { return a != 2 ? 0 : b; }
  189. +
  190. +int primitiveSemantics_compare_imm_08(int a, int b) { return a == 2 ? b : 0; }
  191. +
  192. +int primitiveSemantics_compare_imm_09(int a, int b) { return a != 2 ? b : 0; }
  193. +
  194. +int primitiveSemantics_compare_imm_10(int a, int b) {
  195. + if ((a == 2))
  196. + b = 0;
  197. + return b;
  198. +}
  199. +
  200. +int primitiveSemantics_compare_imm_11(int a, int b) {
  201. + if (!(a == 2))
  202. + b = 0;
  203. + return b;
  204. +}
  205. +
  206. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 6 } } */
  207. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 6 } } */
  208. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  209. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  210. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_0_imm.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_0_imm.c
  211. new file mode 100644
  212. index 00000000000..c90ed100b30
  213. --- /dev/null
  214. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_0_imm.c
  215. @@ -0,0 +1,73 @@
  216. +/* { dg-do compile } */
  217. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  218. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  219. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  220. +
  221. +long primitiveSemantics_compare_imm_return_0_imm_00(long a, long b) {
  222. + return a == 2 ? 0 : 5;
  223. +}
  224. +
  225. +long primitiveSemantics_compare_imm_return_0_imm_01(long a, long b) {
  226. + return a != 2 ? 0 : 5;
  227. +}
  228. +
  229. +long primitiveSemantics_compare_imm_return_0_imm_02(long a, long b) {
  230. + return a == 2 ? 5 : 0;
  231. +}
  232. +
  233. +long primitiveSemantics_compare_imm_return_0_imm_03(long a, long b) {
  234. + return a != 2 ? 5 : 0;
  235. +}
  236. +
  237. +long primitiveSemantics_compare_imm_return_0_imm_04(long a, long b) {
  238. + if (a == 2)
  239. + b = 0;
  240. + else
  241. + b = 5;
  242. + return b;
  243. +}
  244. +
  245. +long primitiveSemantics_compare_imm_return_0_imm_05(long a, long b) {
  246. + if (!(a == 2))
  247. + b = 0;
  248. + else
  249. + b = 5;
  250. + return b;
  251. +}
  252. +
  253. +int primitiveSemantics_compare_imm_return_0_imm_06(int a, int b) {
  254. + return a == 2 ? 0 : 5;
  255. +}
  256. +
  257. +int primitiveSemantics_compare_imm_return_0_imm_07(int a, int b) {
  258. + return a != 2 ? 0 : 5;
  259. +}
  260. +
  261. +int primitiveSemantics_compare_imm_return_0_imm_08(int a, int b) {
  262. + return a == 2 ? 5 : 0;
  263. +}
  264. +
  265. +int primitiveSemantics_compare_imm_return_0_imm_09(int a, int b) {
  266. + return a != 2 ? 5 : 0;
  267. +}
  268. +
  269. +int primitiveSemantics_compare_imm_return_0_imm_10(int a, int b) {
  270. + if ((a == 2))
  271. + b = 0;
  272. + else
  273. + b = 5;
  274. + return b;
  275. +}
  276. +
  277. +int primitiveSemantics_compare_imm_return_0_imm_11(int a, int b) {
  278. + if (!(a == 2))
  279. + b = 0;
  280. + else
  281. + b = 5;
  282. + return b;
  283. +}
  284. +
  285. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 6 } } */
  286. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 6 } } */
  287. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  288. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  289. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_imm.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_imm.c
  290. new file mode 100644
  291. index 00000000000..e806f6f0807
  292. --- /dev/null
  293. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_imm.c
  294. @@ -0,0 +1,73 @@
  295. +/* { dg-do compile } */
  296. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  297. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  298. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  299. +
  300. +long primitiveSemantics_compare_imm_return_imm_imm_00(long a, long b) {
  301. + return a == 2 ? 7 : 4;
  302. +}
  303. +
  304. +long primitiveSemantics_compare_imm_return_imm_imm_01(long a, long b) {
  305. + return a != 2 ? 7 : 4;
  306. +}
  307. +
  308. +long primitiveSemantics_compare_imm_return_imm_imm_02(long a, long b) {
  309. + return a == 2 ? 7 : 4;
  310. +}
  311. +
  312. +long primitiveSemantics_compare_imm_return_imm_imm_03(long a, long b) {
  313. + return a != 2 ? 7 : 4;
  314. +}
  315. +
  316. +long primitiveSemantics_compare_imm_return_imm_imm_04(long a, long b) {
  317. + if (a == 2)
  318. + b = 7;
  319. + else
  320. + b = 4;
  321. + return b;
  322. +}
  323. +
  324. +long primitiveSemantics_compare_imm_return_imm_imm_05(long a, long b) {
  325. + if (!(a == 2))
  326. + b = 7;
  327. + else
  328. + b = 4;
  329. + return b;
  330. +}
  331. +
  332. +int primitiveSemantics_compare_imm_return_imm_imm_06(int a, int b) {
  333. + return a == 2 ? 7 : 4;
  334. +}
  335. +
  336. +int primitiveSemantics_compare_imm_return_imm_imm_07(int a, int b) {
  337. + return a != 2 ? 7 : 4;
  338. +}
  339. +
  340. +int primitiveSemantics_compare_imm_return_imm_imm_08(int a, int b) {
  341. + return a == 2 ? 7 : 4;
  342. +}
  343. +
  344. +int primitiveSemantics_compare_imm_return_imm_imm_09(int a, int b) {
  345. + return a != 2 ? 7 : 4;
  346. +}
  347. +
  348. +int primitiveSemantics_compare_imm_return_imm_imm_10(int a, int b) {
  349. + if ((a == 2))
  350. + b = 7;
  351. + else
  352. + b = 4;
  353. + return b;
  354. +}
  355. +
  356. +int primitiveSemantics_compare_imm_return_imm_imm_11(int a, int b) {
  357. + if (!(a == 2))
  358. + b = 7;
  359. + else
  360. + b = 4;
  361. + return b;
  362. +}
  363. +
  364. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 6 } } */
  365. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 6 } } */
  366. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  367. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  368. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_reg.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_reg.c
  369. new file mode 100644
  370. index 00000000000..f976d608a03
  371. --- /dev/null
  372. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_reg.c
  373. @@ -0,0 +1,65 @@
  374. +/* { dg-do compile } */
  375. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  376. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  377. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  378. +
  379. +long primitiveSemantics_compare_imm_return_imm_reg_00(long a, long b) {
  380. + return a == 2 ? 3 : b;
  381. +}
  382. +
  383. +long primitiveSemantics_compare_imm_return_imm_reg_01(long a, long b) {
  384. + return a != 2 ? 3 : b;
  385. +}
  386. +
  387. +long primitiveSemantics_compare_imm_return_imm_reg_02(long a, long b) {
  388. + return a == 2 ? b : 3;
  389. +}
  390. +
  391. +long primitiveSemantics_compare_imm_return_imm_reg_03(long a, long b) {
  392. + return a != 2 ? b : 3;
  393. +}
  394. +
  395. +long primitiveSemantics_compare_imm_return_imm_reg_04(long a, long b) {
  396. + if (a == 2)
  397. + b = 3;
  398. + return b;
  399. +}
  400. +
  401. +long primitiveSemantics_compare_imm_return_imm_reg_05(long a, long b) {
  402. + if (!(a == 2))
  403. + b = 3;
  404. + return b;
  405. +}
  406. +
  407. +int primitiveSemantics_compare_imm_return_imm_reg_06(int a, int b) {
  408. + return a == 2 ? 3 : b;
  409. +}
  410. +
  411. +int primitiveSemantics_compare_imm_return_imm_reg_07(int a, int b) {
  412. + return a != 2 ? 3 : b;
  413. +}
  414. +
  415. +int primitiveSemantics_compare_imm_return_imm_reg_08(int a, int b) {
  416. + return a == 2 ? b : 3;
  417. +}
  418. +
  419. +int primitiveSemantics_compare_imm_return_imm_reg_09(int a, int b) {
  420. + return a != 2 ? b : 3;
  421. +}
  422. +
  423. +int primitiveSemantics_compare_imm_return_imm_reg_10(int a, int b) {
  424. + if ((a == 2))
  425. + b = 3;
  426. + return b;
  427. +}
  428. +
  429. +int primitiveSemantics_compare_imm_return_imm_reg_11(int a, int b) {
  430. + if (!(a == 2))
  431. + b = 3;
  432. + return b;
  433. +}
  434. +
  435. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 6 } } */
  436. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 6 } } */
  437. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  438. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  439. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_reg_reg.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_reg_reg.c
  440. new file mode 100644
  441. index 00000000000..90e91192373
  442. --- /dev/null
  443. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_reg_reg.c
  444. @@ -0,0 +1,65 @@
  445. +/* { dg-do compile } */
  446. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  447. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  448. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  449. +
  450. +long primitiveSemantics_compare_imm_return_reg_reg_00(long a, long b, long c) {
  451. + return a == 2 ? c : b;
  452. +}
  453. +
  454. +long primitiveSemantics_compare_imm_return_reg_reg_01(long a, long b, long c) {
  455. + return a != 2 ? c : b;
  456. +}
  457. +
  458. +long primitiveSemantics_compare_imm_return_reg_reg_02(long a, long b, long c) {
  459. + return a == 2 ? b : c;
  460. +}
  461. +
  462. +long primitiveSemantics_compare_imm_return_reg_reg_03(long a, long b, long c) {
  463. + return a != 2 ? b : c;
  464. +}
  465. +
  466. +long primitiveSemantics_compare_imm_return_reg_reg_04(long a, long b, long c) {
  467. + if (a == 2)
  468. + b = c;
  469. + return b;
  470. +}
  471. +
  472. +long primitiveSemantics_compare_imm_return_reg_reg_05(long a, long b, long c) {
  473. + if (!(a == 2))
  474. + b = c;
  475. + return b;
  476. +}
  477. +
  478. +int primitiveSemantics_compare_imm_return_reg_reg_06(int a, int b, int c) {
  479. + return a == 2 ? c : b;
  480. +}
  481. +
  482. +int primitiveSemantics_compare_imm_return_reg_reg_07(int a, int b, int c) {
  483. + return a != 2 ? c : b;
  484. +}
  485. +
  486. +int primitiveSemantics_compare_imm_return_reg_reg_08(int a, int b, int c) {
  487. + return a == 2 ? b : c;
  488. +}
  489. +
  490. +int primitiveSemantics_compare_imm_return_reg_reg_09(int a, int b, int c) {
  491. + return a != 2 ? b : c;
  492. +}
  493. +
  494. +int primitiveSemantics_compare_imm_return_reg_reg_10(int a, int b, int c) {
  495. + if ((a == 2))
  496. + b = c;
  497. + return b;
  498. +}
  499. +
  500. +int primitiveSemantics_compare_imm_return_reg_reg_11(int a, int b, int c) {
  501. + if (!(a == 2))
  502. + b = c;
  503. + return b;
  504. +}
  505. +
  506. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 12 } } */
  507. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 12 } } */
  508. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  509. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  510. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg.c
  511. new file mode 100644
  512. index 00000000000..bfe8c06e1a9
  513. --- /dev/null
  514. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg.c
  515. @@ -0,0 +1,65 @@
  516. +/* { dg-do compile } */
  517. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  518. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  519. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  520. +
  521. +long primitiveSemantics_compare_reg_00(long a, long b, long c) {
  522. + return a == c ? 0 : b;
  523. +}
  524. +
  525. +long primitiveSemantics_compare_reg_01(long a, long b, long c) {
  526. + return a != c ? 0 : b;
  527. +}
  528. +
  529. +long primitiveSemantics_compare_reg_02(long a, long b, long c) {
  530. + return a == c ? b : 0;
  531. +}
  532. +
  533. +long primitiveSemantics_compare_reg_03(long a, long b, long c) {
  534. + return a != c ? b : 0;
  535. +}
  536. +
  537. +long primitiveSemantics_compare_reg_04(long a, long b, long c) {
  538. + if (a == c)
  539. + b = 0;
  540. + return b;
  541. +}
  542. +
  543. +long primitiveSemantics_compare_reg_05(long a, long b, long c) {
  544. + if (!(a == c))
  545. + b = 0;
  546. + return b;
  547. +}
  548. +
  549. +int primitiveSemantics_compare_reg_06(int a, int b, int c) {
  550. + return a == c ? 0 : b;
  551. +}
  552. +
  553. +int primitiveSemantics_compare_reg_07(int a, int b, int c) {
  554. + return a != c ? 0 : b;
  555. +}
  556. +
  557. +int primitiveSemantics_compare_reg_08(int a, int b, int c) {
  558. + return a == c ? b : 0;
  559. +}
  560. +
  561. +int primitiveSemantics_compare_reg_09(int a, int b, int c) {
  562. + return a != c ? b : 0;
  563. +}
  564. +
  565. +int primitiveSemantics_compare_reg_10(int a, int b, int c) {
  566. + if ((a == c))
  567. + b = 0;
  568. + return b;
  569. +}
  570. +
  571. +int primitiveSemantics_compare_reg_11(int a, int b, int c) {
  572. + if (!(a == c))
  573. + b = 0;
  574. + return b;
  575. +}
  576. +
  577. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 6 } } */
  578. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 6 } } */
  579. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  580. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  581. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_0_imm.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_0_imm.c
  582. new file mode 100644
  583. index 00000000000..164de069539
  584. --- /dev/null
  585. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_0_imm.c
  586. @@ -0,0 +1,73 @@
  587. +/* { dg-do compile } */
  588. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  589. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  590. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  591. +
  592. +long primitiveSemantics_compare_reg_return_0_imm_00(long a, long b, long c) {
  593. + return a == c ? 0 : 9;
  594. +}
  595. +
  596. +long primitiveSemantics_compare_reg_return_0_imm_01(long a, long b, long c) {
  597. + return a != c ? 0 : 9;
  598. +}
  599. +
  600. +long primitiveSemantics_compare_reg_return_0_imm_02(long a, long b, long c) {
  601. + return a == c ? 9 : 0;
  602. +}
  603. +
  604. +long primitiveSemantics_compare_reg_return_0_imm_03(long a, long b, long c) {
  605. + return a != c ? 9 : 0;
  606. +}
  607. +
  608. +long primitiveSemantics_compare_reg_return_0_imm_04(long a, long b, long c) {
  609. + if (a == c)
  610. + b = 0;
  611. + else
  612. + b = 9;
  613. + return b;
  614. +}
  615. +
  616. +long primitiveSemantics_compare_reg_return_0_imm_05(long a, long b, long c) {
  617. + if (!(a == c))
  618. + b = 0;
  619. + else
  620. + b = 9;
  621. + return b;
  622. +}
  623. +
  624. +int primitiveSemantics_compare_reg_return_0_imm_06(int a, int b, int c) {
  625. + return a == c ? 0 : 9;
  626. +}
  627. +
  628. +int primitiveSemantics_compare_reg_return_0_imm_07(int a, int b, int c) {
  629. + return a != c ? 0 : 9;
  630. +}
  631. +
  632. +int primitiveSemantics_compare_reg_return_0_imm_08(int a, int b, int c) {
  633. + return a == c ? 9 : 0;
  634. +}
  635. +
  636. +int primitiveSemantics_compare_reg_return_0_imm_09(int a, int b, int c) {
  637. + return a != c ? 9 : 0;
  638. +}
  639. +
  640. +int primitiveSemantics_compare_reg_return_0_imm_10(int a, int b, int c) {
  641. + if ((a == c))
  642. + b = 0;
  643. + else
  644. + b = 9;
  645. + return b;
  646. +}
  647. +
  648. +int primitiveSemantics_compare_reg_return_0_imm_11(int a, int b, int c) {
  649. + if (!(a == c))
  650. + b = 0;
  651. + else
  652. + b = 9;
  653. + return b;
  654. +}
  655. +
  656. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 6 } } */
  657. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 6 } } */
  658. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  659. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  660. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_imm.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_imm.c
  661. new file mode 100644
  662. index 00000000000..8ad97abc320
  663. --- /dev/null
  664. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_imm.c
  665. @@ -0,0 +1,73 @@
  666. +/* { dg-do compile } */
  667. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  668. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  669. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  670. +
  671. +long primitiveSemantics_compare_reg_return_imm_imm_00(long a, long b, long c) {
  672. + return a == c ? 7 : 4;
  673. +}
  674. +
  675. +long primitiveSemantics_compare_reg_return_imm_imm_01(long a, long b, long c) {
  676. + return a != c ? 7 : 4;
  677. +}
  678. +
  679. +long primitiveSemantics_compare_reg_return_imm_imm_02(long a, long b, long c) {
  680. + return a == c ? 7 : 4;
  681. +}
  682. +
  683. +long primitiveSemantics_compare_reg_return_imm_imm_03(long a, long b, long c) {
  684. + return a != c ? 7 : 4;
  685. +}
  686. +
  687. +long primitiveSemantics_compare_reg_return_imm_imm_04(long a, long b, long c) {
  688. + if (a == c)
  689. + b = 7;
  690. + else
  691. + b = 4;
  692. + return b;
  693. +}
  694. +
  695. +long primitiveSemantics_compare_reg_return_imm_imm_05(long a, long b, long c) {
  696. + if (!(a == c))
  697. + b = 7;
  698. + else
  699. + b = 4;
  700. + return b;
  701. +}
  702. +
  703. +int primitiveSemantics_compare_reg_return_imm_imm_06(int a, int b, int c) {
  704. + return a == c ? 7 : 4;
  705. +}
  706. +
  707. +int primitiveSemantics_compare_reg_return_imm_imm_07(int a, int b, int c) {
  708. + return a != c ? 7 : 4;
  709. +}
  710. +
  711. +int primitiveSemantics_compare_reg_return_imm_imm_08(int a, int b, int c) {
  712. + return a == c ? 7 : 4;
  713. +}
  714. +
  715. +int primitiveSemantics_compare_reg_return_imm_imm_09(int a, int b, int c) {
  716. + return a != c ? 7 : 4;
  717. +}
  718. +
  719. +int primitiveSemantics_compare_reg_return_imm_imm_10(int a, int b, int c) {
  720. + if ((a == c))
  721. + b = 7;
  722. + else
  723. + b = 4;
  724. + return b;
  725. +}
  726. +
  727. +int primitiveSemantics_compare_reg_return_imm_imm_11(int a, int b, int c) {
  728. + if (!(a == c))
  729. + b = 7;
  730. + else
  731. + b = 4;
  732. + return b;
  733. +}
  734. +
  735. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 6 } } */
  736. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 6 } } */
  737. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  738. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  739. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_reg.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_reg.c
  740. new file mode 100644
  741. index 00000000000..5199ba71ef4
  742. --- /dev/null
  743. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_reg.c
  744. @@ -0,0 +1,65 @@
  745. +/* { dg-do compile } */
  746. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  747. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  748. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  749. +
  750. +long primitiveSemantics_compare_reg_return_imm_reg_00(long a, long b, long c) {
  751. + return a == c ? 10 : b;
  752. +}
  753. +
  754. +long primitiveSemantics_compare_reg_return_imm_reg_01(long a, long b, long c) {
  755. + return a != c ? 10 : b;
  756. +}
  757. +
  758. +long primitiveSemantics_compare_reg_return_imm_reg_02(long a, long b, long c) {
  759. + return a == c ? b : 10;
  760. +}
  761. +
  762. +long primitiveSemantics_compare_reg_return_imm_reg_03(long a, long b, long c) {
  763. + return a != c ? b : 10;
  764. +}
  765. +
  766. +long primitiveSemantics_compare_reg_return_imm_reg_04(long a, long b, long c) {
  767. + if (a == c)
  768. + b = 10;
  769. + return b;
  770. +}
  771. +
  772. +long primitiveSemantics_compare_reg_return_imm_reg_05(long a, long b, long c) {
  773. + if (!(a == c))
  774. + b = 10;
  775. + return b;
  776. +}
  777. +
  778. +int primitiveSemantics_compare_reg_return_imm_reg_06(int a, int b, int c) {
  779. + return a == c ? 10 : b;
  780. +}
  781. +
  782. +int primitiveSemantics_compare_reg_return_imm_reg_07(int a, int b, int c) {
  783. + return a != c ? 10 : b;
  784. +}
  785. +
  786. +int primitiveSemantics_compare_reg_return_imm_reg_08(int a, int b, int c) {
  787. + return a == c ? b : 10;
  788. +}
  789. +
  790. +int primitiveSemantics_compare_reg_return_imm_reg_09(int a, int b, int c) {
  791. + return a != c ? b : 10;
  792. +}
  793. +
  794. +int primitiveSemantics_compare_reg_return_imm_reg_10(int a, int b, int c) {
  795. + if ((a == c))
  796. + b = 10;
  797. + return b;
  798. +}
  799. +
  800. +int primitiveSemantics_compare_reg_return_imm_reg_11(int a, int b, int c) {
  801. + if (!(a == c))
  802. + b = 10;
  803. + return b;
  804. +}
  805. +
  806. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 6 } } */
  807. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 6 } } */
  808. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  809. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  810. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_reg_reg.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_reg_reg.c
  811. new file mode 100644
  812. index 00000000000..eecb95688f4
  813. --- /dev/null
  814. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_reg_reg.c
  815. @@ -0,0 +1,77 @@
  816. +/* { dg-do compile } */
  817. +/* { dg-options "-march=rv64gc_zicond -mabi=lp64d" { target { rv64 } } } */
  818. +/* { dg-options "-march=rv32gc_zicond -mabi=ilp32f" { target { rv32 } } } */
  819. +/* { dg-skip-if "" { *-*-* } {"-O0" "-Og" "-Os" "-Oz"} } */
  820. +
  821. +long primitiveSemantics_compare_reg_return_reg_reg_00(long a, long b, long c,
  822. + long d) {
  823. + return a == c ? d : b;
  824. +}
  825. +
  826. +long primitiveSemantics_compare_reg_return_reg_reg_01(long a, long b, long c,
  827. + long d) {
  828. + return a != c ? d : b;
  829. +}
  830. +
  831. +long primitiveSemantics_compare_reg_return_reg_reg_02(long a, long b, long c,
  832. + long d) {
  833. + return a == c ? b : d;
  834. +}
  835. +
  836. +long primitiveSemantics_compare_reg_return_reg_reg_03(long a, long b, long c,
  837. + long d) {
  838. + return a != c ? b : d;
  839. +}
  840. +
  841. +long primitiveSemantics_compare_reg_return_reg_reg_04(long a, long b, long c,
  842. + long d) {
  843. + if (a == c)
  844. + b = d;
  845. + return b;
  846. +}
  847. +
  848. +long primitiveSemantics_compare_reg_return_reg_reg_05(long a, long b, long c,
  849. + long d) {
  850. + if (!(a == c))
  851. + b = d;
  852. + return b;
  853. +}
  854. +
  855. +int primitiveSemantics_compare_reg_return_reg_reg_06(int a, int b, int c,
  856. + int d) {
  857. + return a == c ? d : b;
  858. +}
  859. +
  860. +int primitiveSemantics_compare_reg_return_reg_reg_07(int a, int b, int c,
  861. + int d) {
  862. + return a != c ? d : b;
  863. +}
  864. +
  865. +int primitiveSemantics_compare_reg_return_reg_reg_08(int a, int b, int c,
  866. + int d) {
  867. + return a == c ? b : d;
  868. +}
  869. +
  870. +int primitiveSemantics_compare_reg_return_reg_reg_09(int a, int b, int c,
  871. + int d) {
  872. + return a != c ? b : d;
  873. +}
  874. +
  875. +int primitiveSemantics_compare_reg_return_reg_reg_10(int a, int b, int c,
  876. + int d) {
  877. + if ((a == c))
  878. + b = d;
  879. + return b;
  880. +}
  881. +
  882. +int primitiveSemantics_compare_reg_return_reg_reg_11(int a, int b, int c,
  883. + int d) {
  884. + if (!(a == c))
  885. + b = d;
  886. + return b;
  887. +}
  888. +
  889. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 12 } } */
  890. +/* { dg-final { scan-assembler-times {\mczero.nez\M} 12 } } */
  891. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  892. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  893. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_0_imm.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_0_imm.c
  894. index 76773d32a8b..e3ccb17032e 100644
  895. --- a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_0_imm.c
  896. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_0_imm.c
  897. @@ -59,7 +59,7 @@ int primitiveSemantics_return_0_imm_11(int a, int b) {
  898. return b;
  899. }
  900. -/* { dg-final { scan-assembler-times "czero.eqz" 6 } } */
  901. -/* { dg-final { scan-assembler-times "czero.nez" 6 } } */
  902. -/* { dg-final { scan-assembler-not "beq" } } */
  903. -/* { dg-final { scan-assembler-not "bne" } } */
  904. +/* { dg-final { scan-assembler-times {\mczero\.eqz\M} 6 } } */
  905. +/* { dg-final { scan-assembler-times {\mczero\.nez\M} 6 } } */
  906. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  907. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  908. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_imm.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_imm.c
  909. index 2b4ee956eb7..62f9fb29169 100644
  910. --- a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_imm.c
  911. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_imm.c
  912. @@ -67,7 +67,7 @@ int primitiveSemantics_return_imm_imm_11(int a, int b) {
  913. return b;
  914. }
  915. -/* { dg-final { scan-assembler-times "czero.eqz" 6 } } */
  916. -/* { dg-final { scan-assembler-times "czero.nez" 6 } } */
  917. -/* { dg-final { scan-assembler-not "beq" } } */
  918. -/* { dg-final { scan-assembler-not "bne" } } */
  919. +/* { dg-final { scan-assembler-times {\mczero\.eqz\M} 6 } } */
  920. +/* { dg-final { scan-assembler-times {\mczero\.nez\M} 6 } } */
  921. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  922. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  923. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_reg.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_reg.c
  924. index 4a96560eb61..0866f86e6ce 100644
  925. --- a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_reg.c
  926. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_imm_reg.c
  927. @@ -59,7 +59,7 @@ int primitiveSemantics_return_imm_reg_11(int a, int b) {
  928. return b;
  929. }
  930. -/* { dg-final { scan-assembler-times "czero.eqz" 6 } } */
  931. -/* { dg-final { scan-assembler-times "czero.nez" 6 } } */
  932. -/* { dg-final { scan-assembler-not "beq" } } */
  933. -/* { dg-final { scan-assembler-not "bne" } } */
  934. +/* { dg-final { scan-assembler-times {\mczero\.eqz\M} 6 } } */
  935. +/* { dg-final { scan-assembler-times {\mczero\.nez\M} 6 } } */
  936. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  937. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  938. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_reg_reg.c b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_reg_reg.c
  939. index 0624b6f16d4..eb1764a27ba 100644
  940. --- a/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_reg_reg.c
  941. +++ b/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_reg_reg.c
  942. @@ -59,7 +59,7 @@ int primitiveSemantics_return_reg_reg_11(int a, int b, int c) {
  943. return b;
  944. }
  945. -/* { dg-final { scan-assembler-times "czero.eqz" 12 } } */
  946. -/* { dg-final { scan-assembler-times "czero.nez" 12 } } */
  947. -/* { dg-final { scan-assembler-not "beq" } } */
  948. -/* { dg-final { scan-assembler-not "bne" } } */
  949. +/* { dg-final { scan-assembler-times {\mczero\.eqz\M} 12 } } */
  950. +/* { dg-final { scan-assembler-times {\mczero\.nez\M} 12 } } */
  951. +/* { dg-final { scan-assembler-not {\mbeq\M} } } */
  952. +/* { dg-final { scan-assembler-not {\mbne\M} } } */
  953. diff --git a/gcc/testsuite/gcc.target/riscv/zicond-xor-01.c b/gcc/testsuite/gcc.target/riscv/zicond-xor-01.c
  954. index 8362ffaf5ab..20079fd4351 100644
  955. --- a/gcc/testsuite/gcc.target/riscv/zicond-xor-01.c
  956. +++ b/gcc/testsuite/gcc.target/riscv/zicond-xor-01.c
  957. @@ -10,5 +10,5 @@ long xor1(long crc, long poly)
  958. return crc;
  959. }
  960. -/* { dg-final { scan-assembler-times "czero.eqz\t" 1 } } */
  961. +/* { dg-final { scan-assembler-times {\mczero.eqz\M} 1 } } */
  962. /* { dg-final { scan-assembler-times "xor\t" 1 } } */
  963. --
  964. 2.25.1