[PATCH] D74847: [CodeGen][RISCV] Fix clang/test/CodeGen/atomic_ops.c for RISC-V

Luís Marques via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 19 09:32:00 PST 2020


luismarques created this revision.
luismarques added reviewers: jyknight, eli.friedman, lenary.
Herald added subscribers: cfe-commits, evandro, sameer.abuasal, s.egerton, Jim, benna, psnobl, PkmX, jfb, rkruppe, rogfer01, shiva0217, kito-cheng, simoncook.
Herald added a project: clang.

By default the RISC-V target doesn't have the atomics standard extension enabled. The first RUN line in `clang/test/CodeGen/atomic_ops.c` doesn't specify a target triple, which means that on RISC-V Linux hosts it will target RISC-V, but because we use clang cc1 we don't get the toolchain driver functionality to automatically turn on the extensions implied by the target triple (riscv64-linux includes atomics). This causes the test to fail on RISC-V hosts.

I waffled a bit regarding the best way to fix this. In the end I decided to 1) use XFAIL to blacklist RISC-V hosts and 2) add explicitly run lines for riscv32/64, with the atomics extension enabled. With that choice we //effectively// don't do the test on RISC-V hosts, but still get to test those two RISC-V targets on other hosts.

An alternative approach would be to eliminate the first RUN line and explicitly list all of the target triples we want to test. But looking at the other clang tests, there doesn't seem to be any test that comprehensively lists all of the targets, and it wasn't quite clear which should be listed on this test. Running clang with the non-cc1 interface would also be an option, but in principle that could still fail in some hypothetical scenarios, and the tests seem to prefer to use cc1.

(It's a shame that XFAIL necessarily means blacklisting host triples, and not target triples. That doesn't interact very well with cross-compilers.)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D74847

Files:
  clang/test/CodeGen/atomic_ops.c


Index: clang/test/CodeGen/atomic_ops.c
===================================================================
--- clang/test/CodeGen/atomic_ops.c
+++ clang/test/CodeGen/atomic_ops.c
@@ -1,7 +1,13 @@
 // XFAIL: hexagon,sparc
 //        (due to not having native load atomic support)
+// XFAIL: riscv
+//        (due to requiring an explicit -target-feature +a)
 // RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s
 // RUN: %clang_cc1 -triple mips-linux-gnu -emit-llvm %s -o - | FileCheck %s
+// RUN: %clang_cc1 -triple riscv64 -target-feature +a -emit-llvm %s \
+// RUN:   -o - | FileCheck %s
+// RUN: %clang_cc1 -triple riscv32 -target-feature +a -emit-llvm %s \
+// RUN:   -o - | FileCheck %s
 
 void foo(int x)
 {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74847.245434.patch
Type: text/x-patch
Size: 714 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200219/e2cb103f/attachment.bin>


More information about the cfe-commits mailing list