[clang] [WebAssembly] Change the default linker for `wasm32-wasip2` (PR #84569)

2024-03-19 Thread Dan Gohman via cfe-commits

sunfishcode wrote:

/cherry-pick 
https://github.com/llvm/llvm-project/commit/d66121d74a458e098511b9de920d815440acaa1b

https://github.com/llvm/llvm-project/pull/84569
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [WebAssembly] Change the default linker for `wasm32-wasip2` (PR #84569)

2024-03-19 Thread Dan Gohman via cfe-commits

https://github.com/sunfishcode milestoned 
https://github.com/llvm/llvm-project/pull/84569
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [WebAssembly] Change the default linker for `wasm32-wasip2` (PR #84569)

2024-03-18 Thread Dan Gohman via cfe-commits

https://github.com/sunfishcode closed 
https://github.com/llvm/llvm-project/pull/84569
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [WebAssembly] Change the default linker for `wasm32-wasip2` (PR #84569)

2024-03-18 Thread Dan Gohman via cfe-commits

https://github.com/sunfishcode approved this pull request.

Looks good!

https://github.com/llvm/llvm-project/pull/84569
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [WebAssembly] Add more features to generic CPU config (PR #80923)

2024-02-07 Thread Dan Gohman via cfe-commits


@@ -259,6 +259,10 @@ AIX Support
 WebAssembly Support
 ^^^
 
+The -mcpu=generic configuration now enables nontrapping-fptoint, multivalue,
+reference-types, and bulk-memory.These proposals are standardized and available
+in all major engines.

sunfishcode wrote:

Could you also mention that enabling multivalue here just means enabling the 
language feauture, and not changing the ABI?


https://github.com/llvm/llvm-project/pull/80923
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 1e4e243 - [WebAssembly] Update supported features in the generic CPU configuration

2022-10-25 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2022-10-25T11:44:22-07:00
New Revision: 1e4e2433bcd1a0296ef1043c462252f0d087d90c

URL: 
https://github.com/llvm/llvm-project/commit/1e4e2433bcd1a0296ef1043c462252f0d087d90c
DIFF: 
https://github.com/llvm/llvm-project/commit/1e4e2433bcd1a0296ef1043c462252f0d087d90c.diff

LOG: [WebAssembly] Update supported features in the generic CPU configuration

Enable sign-ext and mutable-globals in -mcpu=generic. This makes these features
enabled by default.

These features are all [finished proposals], and all major wasm engines
support them.

[finished proposals]: 
https://github.com/WebAssembly/proposals/blob/main/finished-proposals.md

Differential Revision: https://reviews.llvm.org/D125728

Added: 
clang/test/Driver/wasm-features.c

Modified: 
clang/docs/ReleaseNotes.rst
clang/lib/Basic/Targets/WebAssembly.cpp

Removed: 




diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 93462a16ef8fa..5beaf8e532c91 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -607,6 +607,12 @@ X86 Support in Clang
   * Support intrinsic of ``__cmpccxadd_epi32``.
   * Support intrinsic of ``__cmpccxadd_epi64``.
 
+WebAssembly Support in Clang
+
+
+The -mcpu=generic configuration now enables sign-ext and mutable-globals. These
+proposals are standardized and available in all major engines.
+
 DWARF Support in Clang
 --
 

diff  --git a/clang/lib/Basic/Targets/WebAssembly.cpp 
b/clang/lib/Basic/Targets/WebAssembly.cpp
index e0e7f6a25f2b7..a170a7e9f8cdd 100644
--- a/clang/lib/Basic/Targets/WebAssembly.cpp
+++ b/clang/lib/Basic/Targets/WebAssembly.cpp
@@ -147,6 +147,9 @@ bool WebAssemblyTargetInfo::initFeatureMap(
 Features["mutable-globals"] = true;
 Features["tail-call"] = true;
 setSIMDLevel(Features, SIMD128, true);
+  } else if (CPU == "generic") {
+Features["sign-ext"] = true;
+Features["mutable-globals"] = true;
   }
 
   return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);

diff  --git a/clang/test/Driver/wasm-features.c 
b/clang/test/Driver/wasm-features.c
new file mode 100644
index 0..e5f71b42b5055
--- /dev/null
+++ b/clang/test/Driver/wasm-features.c
@@ -0,0 +1,43 @@
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -fsyntax-only 2>&1 | 
FileCheck %s
+
+// CHECK: "-fvisibility=hidden"
+
+// RUN: %clang --target=wasm32-unknown-unknown -### %s 2>&1 | FileCheck %s 
-check-prefix=DEFAULT
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -mcpu=mvp 2>&1 | 
FileCheck %s -check-prefix=MVP
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -mcpu=bleeding-edge 
2>&1 | FileCheck %s -check-prefix=BLEEDING-EDGE
+
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -mbulk-memory 2>&1 | 
FileCheck %s -check-prefix=BULK-MEMORY
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -mno-bulk-memory 2>&1 | 
FileCheck %s -check-prefix=NO-BULK-MEMORY
+
+// BULK-MEMORY: "-target-feature" "+bulk-memory"
+// NO-BULK-MEMORY: "-target-feature" "-bulk-memory"
+// DEFAULT-NOT: "-target-feature" "-bulk-memory"
+// MVP-NOT: "-target-feature" "+bulk-memory"
+// BLEEDING-EDGE-NOT: "-target-feature" "-bulk-memory"
+
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -mmutable-globals 2>&1 
| FileCheck %s -check-prefix=MUTABLE-GLOBALS
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -mno-mutable-globals 
2>&1 | FileCheck %s -check-prefix=NO-MUTABLE-GLOBALS
+
+// MUTABLE-GLOBALS: "-target-feature" "+mutable-globals"
+// NO-MUTABLE-GLOBALS: "-target-feature" "-mutable-globals"
+// DEFAULT-NOT: "-target-feature" "-mutable-globals"
+// MVP-NOT: "-target-feature" "+mutable-globals"
+// BLEEDING-EDGE-NOT: "-target-feature" "-mutable-globals"
+
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -msign-ext 2>&1 | 
FileCheck %s -check-prefix=SIGN-EXT
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -mno-sign-ext 2>&1 | 
FileCheck %s -check-prefix=NO-SIGN-EXT
+
+// SIGN-EXT: "-target-feature" "+sign-ext"
+// NO-SIGN-EXT: "-target-feature" "-sign-ext"
+// DEFAULT-NOT: "-target-feature" "-sign-ext"
+// MVP-NOT: "-target-feature" "+sign-ext"
+// BLEEDING-EDGE-NOT: "-target-feature" "-sign-ext"
+
+// RUN: %clang --target=wasm32-unknown-unknown -### %s -mnontrapping-fptoint 
2>&1 | FileCheck %s -check-prefix=NONTRAPPING-FPTOINT
+// RUN: %clang --target=wasm32-unknown-unknown -### %s 
-mno-nontrapping-fptoint 2>&1 | FileCheck %s 
-check-prefix=NO-NONTRAPPING-FPTOINT
+
+// NONTRAPPING-FPTOINT: "-target-feature" "+nontrapping-fptoint"
+// NO-NONTRAPPING-FPTOINT: "-target-feature" "-nontrapping-fptoint"
+// DEFAULT-NOT: "-target-feature" "-nontrapping-fptoint"
+// MVP-NOT: "-target-feature" "+nontrapping-fptoint"
+// BLEEDING-EDGE-NOT: "-target-feature" "-nontrapping-fptoint"



___
cfe-commits mailing list

[clang] f9c05fc - [WebAssembly] Use the new crt1-command.o if present.

2021-02-11 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2021-02-11T14:44:37-08:00
New Revision: f9c05fc391458e455e8e4d4108a7f270f2f7bedc

URL: 
https://github.com/llvm/llvm-project/commit/f9c05fc391458e455e8e4d4108a7f270f2f7bedc
DIFF: 
https://github.com/llvm/llvm-project/commit/f9c05fc391458e455e8e4d4108a7f270f2f7bedc.diff

LOG: [WebAssembly] Use the new crt1-command.o if present.

If crt1-command.o exists in the sysroot, the libc has new-style command
support, so use it.

Differential Revision: https://reviews.llvm.org/D89274

Added: 


Modified: 
clang/lib/Driver/ToolChains/WebAssembly.cpp

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp 
b/clang/lib/Driver/ToolChains/WebAssembly.cpp
index 6b654886e774..83a895b47142 100644
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -77,6 +77,16 @@ void wasm::Linker::ConstructJob(Compilation , const 
JobAction ,
 
   const char *Crt1 = "crt1.o";
   const char *Entry = NULL;
+
+  // If crt1-command.o exists, it supports new-style commands, so use it.
+  // Otherwise, use the old crt1.o. This is a temporary transition measure.
+  // Once WASI libc no longer needs to support LLVM versions which lack
+  // support for new-style command, it can make crt1.o the same as
+  // crt1-command.o. And once LLVM no longer needs to support WASI libc
+  // versions before that, it can switch to using crt1-command.o.
+  if (ToolChain.GetFilePath("crt1-command.o") != "crt1-command.o")
+Crt1 = "crt1-command.o";
+
   if (const Arg *A = Args.getLastArg(options::OPT_mexec_model_EQ)) {
 StringRef CM = A->getValue();
 if (CM == "command") {



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 95da64d - [WebAssembly] Use single-threaded mode when -matomics isn't enabled.

2021-02-04 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2021-02-04T18:16:48-08:00
New Revision: 95da64da23ac3a5855a8934a738b0fa10aa1323c

URL: 
https://github.com/llvm/llvm-project/commit/95da64da23ac3a5855a8934a738b0fa10aa1323c
DIFF: 
https://github.com/llvm/llvm-project/commit/95da64da23ac3a5855a8934a738b0fa10aa1323c.diff

LOG: [WebAssembly] Use single-threaded mode when -matomics isn't enabled.

When the -matomics feature is not enabled, disable POSIXThreads
mode and set the thread model to Single, so that we don't predefine
macros like `__STDCPP_THREADS__`.

Differential Revision: https://reviews.llvm.org/D96091

Added: 


Modified: 
clang/lib/Basic/Targets/WebAssembly.cpp
clang/lib/Basic/Targets/WebAssembly.h
clang/test/Preprocessor/init.c

Removed: 




diff  --git a/clang/lib/Basic/Targets/WebAssembly.cpp 
b/clang/lib/Basic/Targets/WebAssembly.cpp
index dcb3d8fd7790..89babe85794d 100644
--- a/clang/lib/Basic/Targets/WebAssembly.cpp
+++ b/clang/lib/Basic/Targets/WebAssembly.cpp
@@ -253,6 +253,15 @@ ArrayRef 
WebAssemblyTargetInfo::getTargetBuiltins() const {
  Builtin::FirstTSBuiltin);
 }
 
+void WebAssemblyTargetInfo::adjust(LangOptions ) {
+  // If the Atomics feature isn't available, turn off POSIXThreads and
+  // ThreadModel, so that we don't predefine _REENTRANT or __STDCPP_THREADS__.
+  if (!HasAtomics) {
+Opts.POSIXThreads = false;
+Opts.setThreadModel(LangOptions::ThreadModelKind::Single);
+  }
+}
+
 void WebAssembly32TargetInfo::getTargetDefines(const LangOptions ,
MacroBuilder ) const {
   WebAssemblyTargetInfo::getTargetDefines(Opts, Builder);

diff  --git a/clang/lib/Basic/Targets/WebAssembly.h 
b/clang/lib/Basic/Targets/WebAssembly.h
index 0068ccb5d71f..9150d849f601 100644
--- a/clang/lib/Basic/Targets/WebAssembly.h
+++ b/clang/lib/Basic/Targets/WebAssembly.h
@@ -138,6 +138,8 @@ class LLVM_LIBRARY_VISIBILITY WebAssemblyTargetInfo : 
public TargetInfo {
   bool hasExtIntType() const override { return true; }
 
   bool hasProtectedVisibility() const override { return false; }
+
+  void adjust(LangOptions ) override;
 };
 
 class LLVM_LIBRARY_VISIBILITY WebAssembly32TargetInfo

diff  --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c
index 23c4989c5152..e29b6d3972f8 100644
--- a/clang/test/Preprocessor/init.c
+++ b/clang/test/Preprocessor/init.c
@@ -1479,6 +1479,12 @@
 // RUN: %clang_cc1 -E -dM -ffreestanding -fgnuc-version=4.2.1 
-triple=wasm64-wasi \
 // RUN:   < /dev/null \
 // RUN:   | FileCheck -match-full-lines 
-check-prefixes=WEBASSEMBLY,WEBASSEMBLY64,WEBASSEMBLY-WASI %s
+// RUN: %clang_cc1 -E -dM -ffreestanding -fgnuc-version=4.2.1 
-triple=wasm32-unknown-unknown -x c++ \
+// RUN:   < /dev/null \
+// RUN:   | FileCheck -match-full-lines -check-prefixes=WEBASSEMBLY-CXX %s
+// RUN: %clang_cc1 -E -dM -ffreestanding -fgnuc-version=4.2.1 
-triple=wasm32-unknown-unknown -x c++ -pthread -target-feature +atomics \
+// RUN:   < /dev/null \
+// RUN:   | FileCheck -match-full-lines 
-check-prefixes=WEBASSEMBLY-CXX-ATOMICS %s
 //
 // WEBASSEMBLY32:#define _ILP32 1
 // WEBASSEMBLY32-NOT:#define _LP64
@@ -1847,6 +1853,10 @@
 // WEBASSEMBLY64-NEXT:#define __wasm64 1
 // WEBASSEMBLY64-NEXT:#define __wasm64__ 1
 // WEBASSEMBLY-NEXT:#define __wasm__ 1
+// WEBASSEMBLY-CXX-NOT:_REENTRANT
+// WEBASSEMBLY-CXX-NOT:__STDCPP_THREADS__
+// WEBASSEMBLY-CXX-ATOMICS:#define _REENTRANT 1
+// WEBASSEMBLY-CXX-ATOMICS:#define __STDCPP_THREADS__ 1
 
 // RUN: %clang_cc1 -E -dM -ffreestanding -triple i686-windows-cygnus < 
/dev/null | FileCheck -match-full-lines -check-prefix CYGWIN-X32 %s
 // CYGWIN-X32: #define __USER_LABEL_PREFIX__ _



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 47f7174 - [WebAssembly] Use "signed char" instead of "char" in SIMD intrinsics.

2020-08-04 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2020-08-04T12:48:40-07:00
New Revision: 47f7174ffa71d339c1a65d1dd9a2ac5ff2abc95d

URL: 
https://github.com/llvm/llvm-project/commit/47f7174ffa71d339c1a65d1dd9a2ac5ff2abc95d
DIFF: 
https://github.com/llvm/llvm-project/commit/47f7174ffa71d339c1a65d1dd9a2ac5ff2abc95d.diff

LOG: [WebAssembly] Use "signed char" instead of "char" in SIMD intrinsics.

This allows people to use `int8_t` instead of `char`, -funsigned-char,
and generally decouples SIMD from the specialness of `char`.

And it makes intrinsics like `__builtin_wasm_add_saturate_s_i8x16`
and `__builtin_wasm_add_saturate_u_i8x16` use signed and unsigned
element types, respectively.

Differential Revision: https://reviews.llvm.org/D85074

Added: 


Modified: 
clang/include/clang/Basic/BuiltinsWebAssembly.def
clang/lib/Headers/wasm_simd128.h
clang/test/CodeGen/builtins-wasm.c

Removed: 




diff  --git a/clang/include/clang/Basic/BuiltinsWebAssembly.def 
b/clang/include/clang/Basic/BuiltinsWebAssembly.def
index 39f29740cf56d..c0ac74686cf1c 100644
--- a/clang/include/clang/Basic/BuiltinsWebAssembly.def
+++ b/clang/include/clang/Basic/BuiltinsWebAssembly.def
@@ -66,67 +66,67 @@ TARGET_BUILTIN(__builtin_wasm_trunc_saturate_s_i64_f64, 
"LLid", "nc", "nontrappi
 TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i64_f64, "LLid", "nc", 
"nontrapping-fptoint")
 
 // SIMD builtins
-TARGET_BUILTIN(__builtin_wasm_swizzle_v8x16, "V16cV16cV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_swizzle_v8x16, "V16ScV16ScV16Sc", "nc", 
"simd128")
 
-TARGET_BUILTIN(__builtin_wasm_extract_lane_s_i8x16, "iV16cIi", "nc", "simd128")
-TARGET_BUILTIN(__builtin_wasm_extract_lane_u_i8x16, "iV16cIi", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_s_i8x16, "iV16ScIi", "nc", 
"simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_u_i8x16, "iV16UcIUi", "nc", 
"simd128")
 TARGET_BUILTIN(__builtin_wasm_extract_lane_s_i16x8, "iV8sIi", "nc", "simd128")
-TARGET_BUILTIN(__builtin_wasm_extract_lane_u_i16x8, "iV8sIi", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_u_i16x8, "iV8UsIUi", "nc", 
"simd128")
 TARGET_BUILTIN(__builtin_wasm_extract_lane_i32x4, "iV4iIi", "nc", "simd128")
 TARGET_BUILTIN(__builtin_wasm_extract_lane_i64x2, "LLiV2LLiIi", "nc", 
"simd128")
 TARGET_BUILTIN(__builtin_wasm_extract_lane_f32x4, "fV4fIi", "nc", "simd128")
 TARGET_BUILTIN(__builtin_wasm_extract_lane_f64x2, "dV2dIi", "nc", "simd128")
 
-TARGET_BUILTIN(__builtin_wasm_replace_lane_i8x16, "V16cV16cIii", "nc", 
"simd128")
+TARGET_BUILTIN(__builtin_wasm_replace_lane_i8x16, "V16ScV16ScIii", "nc", 
"simd128")
 TARGET_BUILTIN(__builtin_wasm_replace_lane_i16x8, "V8sV8sIii", "nc", "simd128")
 TARGET_BUILTIN(__builtin_wasm_replace_lane_i32x4, "V4iV4iIii", "nc", "simd128")
 TARGET_BUILTIN(__builtin_wasm_replace_lane_i64x2, "V2LLiV2LLiIiLLi", "nc", 
"simd128")
 TARGET_BUILTIN(__builtin_wasm_replace_lane_f32x4, "V4fV4fIif", "nc", "simd128")
 TARGET_BUILTIN(__builtin_wasm_replace_lane_f64x2, "V2dV2dIid", "nc", "simd128")
 
-TARGET_BUILTIN(__builtin_wasm_add_saturate_s_i8x16, "V16cV16cV16c", "nc", 
"simd128")
-TARGET_BUILTIN(__builtin_wasm_add_saturate_u_i8x16, "V16cV16cV16c", "nc", 
"simd128")
+TARGET_BUILTIN(__builtin_wasm_add_saturate_s_i8x16, "V16ScV16ScV16Sc", "nc", 
"simd128")
+TARGET_BUILTIN(__builtin_wasm_add_saturate_u_i8x16, "V16UcV16UcV16Uc", "nc", 
"simd128")
 TARGET_BUILTIN(__builtin_wasm_add_saturate_s_i16x8, "V8sV8sV8s", "nc", 
"simd128")
-TARGET_BUILTIN(__builtin_wasm_add_saturate_u_i16x8, "V8sV8sV8s", "nc", 
"simd128")
+TARGET_BUILTIN(__builtin_wasm_add_saturate_u_i16x8, "V8UsV8UsV8Us", "nc", 
"simd128")
 
-TARGET_BUILTIN(__builtin_wasm_sub_saturate_s_i8x16, "V16cV16cV16c", "nc", 
"simd128")
-TARGET_BUILTIN(__builtin_wasm_sub_saturate_u_i8x16, "V16cV16cV16c", "nc", 
"simd128")
+TARGET_BUILTIN(__builtin_wasm_sub_saturate_s_i8x16, "V16ScV16ScV16Sc", "nc", 
"simd128")
+TARGET_BUILTIN(__builtin_wasm_sub_saturate_u_i8x16, "V16UcV16UcV16Uc", "nc", 
"simd128")
 TARGET_BUILTIN(__builtin_wasm_sub_saturate_s_i16x8, "V8sV8sV8s", "nc", 
"simd128")
-TARGET_BUILTIN(__builtin_wasm_sub_saturate_u_i16x8, "V8sV8sV8s", "nc", 
"simd128")
+TARGET_BUILTIN(__builtin_wasm_sub_saturate_u_i16x8, "V8UsV8UsV8Us", "nc", 
"simd128")
 
-TARGET_BUILTIN(__builtin_wasm_abs_i8x16, "V16cV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_abs_i8x16, "V16ScV16Sc", "nc", "simd128")
 TARGET_BUILTIN(__builtin_wasm_abs_i16x8, "V8sV8s", "nc", "simd128")
 TARGET_BUILTIN(__builtin_wasm_abs_i32x4, "V4iV4i", "nc", "simd128")
 
-TARGET_BUILTIN(__builtin_wasm_min_s_i8x16, "V16cV16cV16c", "nc", "simd128")
-TARGET_BUILTIN(__builtin_wasm_min_u_i8x16, "V16cV16cV16c", "nc", "simd128")
-TARGET_BUILTIN(__builtin_wasm_max_s_i8x16, "V16cV16cV16c", "nc", "simd128")
-TARGET_BUILTIN(__builtin_wasm_max_u_i8x16, "V16cV16cV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_min_s_i8x16, "V16ScV16ScV16Sc", "nc", 

[clang] 6604295 - [WebAssembly] WebAssembly doesn't support "protected" visibility

2020-06-12 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2020-06-12T19:52:35-07:00
New Revision: 66042959590d6db9d2a12803a16476d4e3508f3f

URL: 
https://github.com/llvm/llvm-project/commit/66042959590d6db9d2a12803a16476d4e3508f3f
DIFF: 
https://github.com/llvm/llvm-project/commit/66042959590d6db9d2a12803a16476d4e3508f3f.diff

LOG: [WebAssembly] WebAssembly doesn't support "protected" visibility

Implement the `hasProtectedVisibility()` hook to indicate that, like
Darwin, WebAssembly doesn't support "protected" visibility.

On ELF, "protected" visibility is intended to be an optimization, however
in practice it often [isn't], and ELF documentation generally ranges from
[not mentioning it at all] to [strongly discouraging its use].

[isn't]: https://www.airs.com/blog/archives/307
[not mentioning it at all]: https://gcc.gnu.org/wiki/Visibility
[strongly discouraging its use]: https://www.akkadia.org/drepper/dsohowto.pdf

While here, also mention the new Reactor support in the release notes.

Added: 


Modified: 
clang/lib/Basic/Targets/WebAssembly.h
llvm/docs/ReleaseNotes.rst

Removed: 




diff  --git a/clang/lib/Basic/Targets/WebAssembly.h 
b/clang/lib/Basic/Targets/WebAssembly.h
index 030d79ea2ecc..e09e21d90802 100644
--- a/clang/lib/Basic/Targets/WebAssembly.h
+++ b/clang/lib/Basic/Targets/WebAssembly.h
@@ -132,7 +132,14 @@ class LLVM_LIBRARY_VISIBILITY WebAssemblyTargetInfo : 
public TargetInfo {
   }
 
   bool hasExtIntType() const override { return true; }
+
+  bool hasProtectedVisibility() const override {
+// TODO: For now, continue to advertise "protected" support for
+// Emscripten targets.
+return getTriple().isOSEmscripten();
+  }
 };
+
 class LLVM_LIBRARY_VISIBILITY WebAssembly32TargetInfo
 : public WebAssemblyTargetInfo {
 public:

diff  --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst
index ea1fad1f6390..7d71d0c58a4c 100644
--- a/llvm/docs/ReleaseNotes.rst
+++ b/llvm/docs/ReleaseNotes.rst
@@ -144,8 +144,14 @@ Changes to the AVR Target
 Changes to the WebAssembly Target
 -
 
-During this release ...
-
+* Programs which don't have a "main" function, called "reactors" are now
+  properly supported, with a new `-mexec-model=reactor` flag. Programs which
+  previously used `-Wl,--no-entry` to avoid having a main function should
+  switch to this new flag, so that static initialization is properly
+  performed.
+
+* `__attribute__((visibility("protected")))` now evokes a warning, as
+  WebAssembly does not support "protected" visibility.
 
 Changes to the OCaml bindings
 -



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 0d4e243 - [WebAssembly] Improve clang diagnostics for wasm attributes

2020-06-05 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2020-06-05T14:32:51-07:00
New Revision: 0d4e243456809eabd6914669753eda242b5da4cb

URL: 
https://github.com/llvm/llvm-project/commit/0d4e243456809eabd6914669753eda242b5da4cb
DIFF: 
https://github.com/llvm/llvm-project/commit/0d4e243456809eabd6914669753eda242b5da4cb.diff

LOG: [WebAssembly] Improve clang diagnostics for wasm attributes

This patch addresses the review comments on r352930:

 - Removes redundant diagnostic checking code
 - Removes errnoneous use of diag::err_alias_is_definition, which
   turned out to be ineffective anyway since functions can be defined later
   in the translation unit and avoid detection.
 - Adds a test for various invalid cases for import_name and import_module.

This reapplies D59520, with the addition of adding
`InGroup` to the new warnings, to fix the
Misc/warning-flags.c failure.

Differential Revision: https://reviews.llvm.org/D59520

Added: 
clang/test/AST/ast-dump-wasm-attr-export.c
clang/test/AST/ast-dump-wasm-attr-import.c
clang/test/Sema/attr-wasm.c

Modified: 
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaDeclAttr.cpp

Removed: 




diff  --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 0a284b9a8906..45a7f1c700b4 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -10770,6 +10770,14 @@ def err_matrix_separate_incomplete_index: Error<
 def err_matrix_subscript_comma: Error<
   "comma expressions are not allowed as indices in matrix subscript 
expressions">;
 
+def warn_mismatched_import : Warning<
+  "import %select{module|name}0 (%1) does not match the import 
%select{module|name}0 (%2) of the "
+  "previous declaration">,
+  InGroup;
+def warn_import_on_definition : Warning<
+  "import %select{module|name}0 cannot be applied to a function with a 
definition">,
+  InGroup;
+
 def err_preserve_field_info_not_field : Error<
   "__builtin_preserve_field_info argument %0 not a field access">;
 def err_preserve_field_info_not_const: Error<

diff  --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 5f0a03b1c93f..cef25fc927aa 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -2999,6 +2999,10 @@ class Sema final {
 const InternalLinkageAttr );
   CommonAttr *mergeCommonAttr(Decl *D, const ParsedAttr );
   CommonAttr *mergeCommonAttr(Decl *D, const CommonAttr );
+  WebAssemblyImportNameAttr *mergeImportNameAttr(
+  Decl *D, const WebAssemblyImportNameAttr );
+  WebAssemblyImportModuleAttr *mergeImportModuleAttr(
+  Decl *D, const WebAssemblyImportModuleAttr );
 
   void mergeDeclAttributes(NamedDecl *New, Decl *Old,
AvailabilityMergeKind AMK = AMK_Redeclaration);

diff  --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 6e52c95ad488..025b09de0ad1 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2598,6 +2598,10 @@ static bool mergeDeclAttribute(Sema , NamedDecl *D,
 NewAttr = S.mergeSpeculativeLoadHardeningAttr(D, *SLHA);
   else if (const auto *SLHA = dyn_cast(Attr))
 NewAttr = S.mergeNoSpeculativeLoadHardeningAttr(D, *SLHA);
+  else if (const auto *IMA = dyn_cast(Attr))
+NewAttr = S.mergeImportModuleAttr(D, *IMA);
+  else if (const auto *INA = dyn_cast(Attr))
+NewAttr = S.mergeImportNameAttr(D, *INA);
   else if (Attr->shouldInheritEvenIfAlreadyPresent() || !DeclHasAttr(D, Attr))
 NewAttr = cast(Attr->clone(S.Context));
 

diff  --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index df44b6fcf2af..763db5b41bb8 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -5892,45 +5892,75 @@ static void handleWebAssemblyExportNameAttr(Sema , 
Decl *D, const ParsedAttr &
   D->addAttr(UsedAttr::CreateImplicit(S.Context));
 }
 
-static void handleWebAssemblyImportModuleAttr(Sema , Decl *D, const 
ParsedAttr ) {
-  if (!isFunctionOrMethod(D)) {
-S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type)
-<< "'import_module'" << ExpectedFunction;
-return;
+WebAssemblyImportModuleAttr *
+Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr ) {
+  auto *FD = cast(D);
+
+  if (const auto *ExistingAttr = FD->getAttr()) {
+if (ExistingAttr->getImportModule() == AL.getImportModule())
+  return nullptr;
+Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 0
+  << ExistingAttr->getImportModule() << AL.getImportModule();
+Diag(AL.getLoc(), diag::note_previous_attribute);
+return nullptr;
+  }
+  if (FD->hasBody()) {
+Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;
+return nullptr;
  

[clang] 3aec298 - Revert "[WebAssembly] Improve clang diagnostics for wasm attributes"

2020-06-05 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2020-06-05T11:52:11-07:00
New Revision: 3aec298349fbc901a51b47004fb156090b3d6bce

URL: 
https://github.com/llvm/llvm-project/commit/3aec298349fbc901a51b47004fb156090b3d6bce
DIFF: 
https://github.com/llvm/llvm-project/commit/3aec298349fbc901a51b47004fb156090b3d6bce.diff

LOG: Revert "[WebAssembly] Improve clang diagnostics for wasm attributes"

It broke clang-check.

This reverts commit 931fcd3ba011c27626a95e5e35b657763284882a.

Added: 


Modified: 
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaDeclAttr.cpp

Removed: 
clang/test/AST/ast-dump-wasm-attr-export.c
clang/test/AST/ast-dump-wasm-attr-import.c
clang/test/Sema/attr-wasm.c



diff  --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index e4bdfe17471d..0a284b9a8906 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -10770,12 +10770,6 @@ def err_matrix_separate_incomplete_index: Error<
 def err_matrix_subscript_comma: Error<
   "comma expressions are not allowed as indices in matrix subscript 
expressions">;
 
-def warn_mismatched_import : Warning<
-  "import %select{module|name}0 (%1) does not match the import 
%select{module|name}0 (%2) of the "
-  "previous declaration">;
-def warn_import_on_definition : Warning<
-  "import %select{module|name}0 cannot be applied to a function with a 
definition">;
-
 def err_preserve_field_info_not_field : Error<
   "__builtin_preserve_field_info argument %0 not a field access">;
 def err_preserve_field_info_not_const: Error<

diff  --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index cef25fc927aa..5f0a03b1c93f 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -2999,10 +2999,6 @@ class Sema final {
 const InternalLinkageAttr );
   CommonAttr *mergeCommonAttr(Decl *D, const ParsedAttr );
   CommonAttr *mergeCommonAttr(Decl *D, const CommonAttr );
-  WebAssemblyImportNameAttr *mergeImportNameAttr(
-  Decl *D, const WebAssemblyImportNameAttr );
-  WebAssemblyImportModuleAttr *mergeImportModuleAttr(
-  Decl *D, const WebAssemblyImportModuleAttr );
 
   void mergeDeclAttributes(NamedDecl *New, Decl *Old,
AvailabilityMergeKind AMK = AMK_Redeclaration);

diff  --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 025b09de0ad1..6e52c95ad488 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2598,10 +2598,6 @@ static bool mergeDeclAttribute(Sema , NamedDecl *D,
 NewAttr = S.mergeSpeculativeLoadHardeningAttr(D, *SLHA);
   else if (const auto *SLHA = dyn_cast(Attr))
 NewAttr = S.mergeNoSpeculativeLoadHardeningAttr(D, *SLHA);
-  else if (const auto *IMA = dyn_cast(Attr))
-NewAttr = S.mergeImportModuleAttr(D, *IMA);
-  else if (const auto *INA = dyn_cast(Attr))
-NewAttr = S.mergeImportNameAttr(D, *INA);
   else if (Attr->shouldInheritEvenIfAlreadyPresent() || !DeclHasAttr(D, Attr))
 NewAttr = cast(Attr->clone(S.Context));
 

diff  --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 763db5b41bb8..df44b6fcf2af 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -5892,75 +5892,45 @@ static void handleWebAssemblyExportNameAttr(Sema , 
Decl *D, const ParsedAttr &
   D->addAttr(UsedAttr::CreateImplicit(S.Context));
 }
 
-WebAssemblyImportModuleAttr *
-Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr ) {
-  auto *FD = cast(D);
-
-  if (const auto *ExistingAttr = FD->getAttr()) {
-if (ExistingAttr->getImportModule() == AL.getImportModule())
-  return nullptr;
-Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 0
-  << ExistingAttr->getImportModule() << AL.getImportModule();
-Diag(AL.getLoc(), diag::note_previous_attribute);
-return nullptr;
-  }
-  if (FD->hasBody()) {
-Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;
-return nullptr;
+static void handleWebAssemblyImportModuleAttr(Sema , Decl *D, const 
ParsedAttr ) {
+  if (!isFunctionOrMethod(D)) {
+S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type)
+<< "'import_module'" << ExpectedFunction;
+return;
   }
-  return ::new (Context) WebAssemblyImportModuleAttr(Context, AL,
- AL.getImportModule());
-}
 
-WebAssemblyImportNameAttr *
-Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr ) {
   auto *FD = cast(D);
-
-  if (const auto *ExistingAttr = FD->getAttr()) {
-if (ExistingAttr->getImportName() == AL.getImportName())
-  return nullptr;
-Diag(ExistingAttr->getLocation(), 

[clang] 931fcd3 - [WebAssembly] Improve clang diagnostics for wasm attributes

2020-06-05 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2020-06-05T11:27:51-07:00
New Revision: 931fcd3ba011c27626a95e5e35b657763284882a

URL: 
https://github.com/llvm/llvm-project/commit/931fcd3ba011c27626a95e5e35b657763284882a
DIFF: 
https://github.com/llvm/llvm-project/commit/931fcd3ba011c27626a95e5e35b657763284882a.diff

LOG: [WebAssembly] Improve clang diagnostics for wasm attributes

This patch addresses the review comments on r352930:

 - Removes redundant diagnostic checking code
 - Removes errnoneous use of diag::err_alias_is_definition, which
   turned out to be ineffective anyway since functions can be defined later
   in the translation unit and avoid detection.
 - Adds a test for various invalid cases for import_name and import_module.

Differential Revision: https://reviews.llvm.org/D59520

Added: 
clang/test/AST/ast-dump-wasm-attr-export.c
clang/test/AST/ast-dump-wasm-attr-import.c
clang/test/Sema/attr-wasm.c

Modified: 
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaDeclAttr.cpp

Removed: 




diff  --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 0a284b9a8906..e4bdfe17471d 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -10770,6 +10770,12 @@ def err_matrix_separate_incomplete_index: Error<
 def err_matrix_subscript_comma: Error<
   "comma expressions are not allowed as indices in matrix subscript 
expressions">;
 
+def warn_mismatched_import : Warning<
+  "import %select{module|name}0 (%1) does not match the import 
%select{module|name}0 (%2) of the "
+  "previous declaration">;
+def warn_import_on_definition : Warning<
+  "import %select{module|name}0 cannot be applied to a function with a 
definition">;
+
 def err_preserve_field_info_not_field : Error<
   "__builtin_preserve_field_info argument %0 not a field access">;
 def err_preserve_field_info_not_const: Error<

diff  --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 5f0a03b1c93f..cef25fc927aa 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -2999,6 +2999,10 @@ class Sema final {
 const InternalLinkageAttr );
   CommonAttr *mergeCommonAttr(Decl *D, const ParsedAttr );
   CommonAttr *mergeCommonAttr(Decl *D, const CommonAttr );
+  WebAssemblyImportNameAttr *mergeImportNameAttr(
+  Decl *D, const WebAssemblyImportNameAttr );
+  WebAssemblyImportModuleAttr *mergeImportModuleAttr(
+  Decl *D, const WebAssemblyImportModuleAttr );
 
   void mergeDeclAttributes(NamedDecl *New, Decl *Old,
AvailabilityMergeKind AMK = AMK_Redeclaration);

diff  --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 6e52c95ad488..025b09de0ad1 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2598,6 +2598,10 @@ static bool mergeDeclAttribute(Sema , NamedDecl *D,
 NewAttr = S.mergeSpeculativeLoadHardeningAttr(D, *SLHA);
   else if (const auto *SLHA = dyn_cast(Attr))
 NewAttr = S.mergeNoSpeculativeLoadHardeningAttr(D, *SLHA);
+  else if (const auto *IMA = dyn_cast(Attr))
+NewAttr = S.mergeImportModuleAttr(D, *IMA);
+  else if (const auto *INA = dyn_cast(Attr))
+NewAttr = S.mergeImportNameAttr(D, *INA);
   else if (Attr->shouldInheritEvenIfAlreadyPresent() || !DeclHasAttr(D, Attr))
 NewAttr = cast(Attr->clone(S.Context));
 

diff  --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index df44b6fcf2af..763db5b41bb8 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -5892,45 +5892,75 @@ static void handleWebAssemblyExportNameAttr(Sema , 
Decl *D, const ParsedAttr &
   D->addAttr(UsedAttr::CreateImplicit(S.Context));
 }
 
-static void handleWebAssemblyImportModuleAttr(Sema , Decl *D, const 
ParsedAttr ) {
-  if (!isFunctionOrMethod(D)) {
-S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type)
-<< "'import_module'" << ExpectedFunction;
-return;
+WebAssemblyImportModuleAttr *
+Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr ) {
+  auto *FD = cast(D);
+
+  if (const auto *ExistingAttr = FD->getAttr()) {
+if (ExistingAttr->getImportModule() == AL.getImportModule())
+  return nullptr;
+Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 0
+  << ExistingAttr->getImportModule() << AL.getImportModule();
+Diag(AL.getLoc(), diag::note_previous_attribute);
+return nullptr;
+  }
+  if (FD->hasBody()) {
+Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;
+return nullptr;
   }
+  return ::new (Context) WebAssemblyImportModuleAttr(Context, AL,
+ AL.getImportModule());

[clang] 072192d - [WebAssembly] Fix a testcase to be independent of the sysroot default

2020-06-04 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2020-06-04T16:04:44-07:00
New Revision: 072192d54aa0a5c4bb694be8280dd4fef495b582

URL: 
https://github.com/llvm/llvm-project/commit/072192d54aa0a5c4bb694be8280dd4fef495b582
DIFF: 
https://github.com/llvm/llvm-project/commit/072192d54aa0a5c4bb694be8280dd4fef495b582.diff

LOG: [WebAssembly] Fix a testcase to be independent of the sysroot default

As a followup to D62922, add a sysroot command-line option to this test
to ensure that the output is independent of any default sysroot options,
and adjust the reactor test to be more consistent with the command test.

Added: 


Modified: 
clang/test/Driver/wasm-toolchain.c

Removed: 




diff  --git a/clang/test/Driver/wasm-toolchain.c 
b/clang/test/Driver/wasm-toolchain.c
index 8300a81614e3..ad8b000ad225 100644
--- a/clang/test/Driver/wasm-toolchain.c
+++ b/clang/test/Driver/wasm-toolchain.c
@@ -110,11 +110,12 @@
 
 // Basic exec-model tests.
 
-// RUN: %clang %s -### -no-canonical-prefixes -target wasm32-unknown-unknown 
-mexec-model=command 2>&1 \
+// RUN: %clang %s -### -no-canonical-prefixes -target wasm32-unknown-unknown 
--sysroot=%s/no-sysroot-there -mexec-model=command 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-COMMAND %s
 // CHECK-COMMAND: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
 // CHECK-COMMAND: wasm-ld{{.*}}" "crt1.o" "[[temp]]" "-lc" 
"{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
 
-// RUN: %clang %s -### -no-canonical-prefixes -target wasm32-unknown-unknown 
-mexec-model=reactor 2>&1 \
+// RUN: %clang %s -### -no-canonical-prefixes -target wasm32-unknown-unknown 
--sysroot=%s/no-sysroot-there -mexec-model=reactor 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-REACTOR %s
-// CHECK-REACTOR: wasm-ld{{.*}}" {{.*}} "--entry" "_initialize" {{.*}}
+// CHECK-REACTOR: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
+// CHECK-REACTOR: wasm-ld{{.*}}" "crt1-reactor.o" "--entry" "_initialize" 
"[[temp]]" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] d496437 - [WebAssembly] Add support for -mexec-model=reactor

2020-06-03 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2020-06-03T14:02:47-07:00
New Revision: d496437a0bfd6d135343026cdb7b6a69cb6af536

URL: 
https://github.com/llvm/llvm-project/commit/d496437a0bfd6d135343026cdb7b6a69cb6af536
DIFF: 
https://github.com/llvm/llvm-project/commit/d496437a0bfd6d135343026cdb7b6a69cb6af536.diff

LOG: [WebAssembly] Add support for -mexec-model=reactor

This adds a -mexec-model= command-line flag. The default value is "command"
which is no change from the current behavior. The other option is "reactor"
which enables the WASI Reactor ABI:

https://github.com/WebAssembly/WASI/blob/master/design/application-abi.md

Differential Revision: https://reviews.llvm.org/D62922

Added: 


Modified: 
clang/docs/ClangCommandLineReference.rst
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/WebAssembly.cpp
clang/test/Driver/wasm-toolchain.c

Removed: 




diff  --git a/clang/docs/ClangCommandLineReference.rst 
b/clang/docs/ClangCommandLineReference.rst
index 4fde6034975e..1ebcab1651d0 100644
--- a/clang/docs/ClangCommandLineReference.rst
+++ b/clang/docs/ClangCommandLineReference.rst
@@ -3051,6 +3051,12 @@ WebAssembly
 
 .. option:: -munimplemented-simd128, -mno-unimplemented-simd128
 
+.. option:: -mexec-model=
+
+Select between "command" and "reactor" executable models. Commands have a main
+function which scopes the lifetime of the program. Reactors are activated and
+remain active until explicitly terminated.
+
 X86
 ---
 .. option:: -m3dnow, -mno-3dnow

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 05a9121592ef..add71fb7dfd7 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -171,6 +171,10 @@ def m_ppc_Features_Group : OptionGroup<"">,
Group, DocName<"PowerPC">;
 def m_wasm_Features_Group : OptionGroup<"">,
 Group, DocName<"WebAssembly">;
+// The features added by this group will not be added to target features.
+// These are explicitly handled.
+def m_wasm_Features_Driver_Group : OptionGroup<"">,
+   Group, DocName<"WebAssembly 
Driver">;
 def m_x86_Features_Group : OptionGroup<"">,
Group, Flags<[CoreOption]>, DocName<"X86">;
 def m_riscv_Features_Group : OptionGroup<"">,
@@ -2456,6 +2460,9 @@ def mtail_call : Flag<["-"], "mtail-call">, 
Group;
 def mno_tail_call : Flag<["-"], "mno-tail-call">, Group;
 def mreference_types : Flag<["-"], "mreference-types">, 
Group;
 def mno_reference_types : Flag<["-"], "mno-reference-types">, 
Group;
+def mexec_model_EQ : Joined<["-"], "mexec-model=">, 
Group,
+ Values<"command,reactor">,
+ HelpText<"Execution model (WebAssembly only)">;
 
 def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">,
   Flags<[HelpHidden]>,

diff  --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp 
b/clang/lib/Driver/ToolChains/WebAssembly.cpp
index 461ec75d17f6..48f9a9b603db 100644
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -69,8 +69,26 @@ void wasm::Linker::ConstructJob(Compilation , const 
JobAction ,
   Args.AddAllArgs(CmdArgs, options::OPT_u);
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
+  const char *Crt1 = "crt1.o";
+  const char *Entry = NULL;
+  if (const Arg *A = Args.getLastArg(options::OPT_mexec_model_EQ)) {
+StringRef CM = A->getValue();
+if (CM == "command") {
+  // Use default values.
+} else if (CM == "reactor") {
+  Crt1 = "crt1-reactor.o";
+  Entry = "_initialize";
+} else {
+  ToolChain.getDriver().Diag(diag::err_drv_invalid_argument_to_option)
+  << CM << A->getOption().getName();
+}
+  }
   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles))
-CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt1.o")));
+CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(Crt1)));
+  if (Entry) {
+CmdArgs.push_back(Args.MakeArgString("--entry"));
+CmdArgs.push_back(Args.MakeArgString(Entry));
+  }
 
   AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
 

diff  --git a/clang/test/Driver/wasm-toolchain.c 
b/clang/test/Driver/wasm-toolchain.c
index 343c1b001ef8..8300a81614e3 100644
--- a/clang/test/Driver/wasm-toolchain.c
+++ b/clang/test/Driver/wasm-toolchain.c
@@ -107,3 +107,14 @@
 // RUN: %clang %s -### -fsanitize=address -target wasm32-unknown-emscripten 
2>&1 | FileCheck -check-prefix=CHECK-ASAN-EMSCRIPTEN %s
 // CHECK-ASAN-EMSCRIPTEN: "-fsanitize=address"
 // CHECK-ASAN-EMSCRIPTEN: "-fsanitize-address-globals-dead-stripping"
+
+// Basic exec-model tests.
+
+// RUN: %clang %s -### -no-canonical-prefixes -target wasm32-unknown-unknown 
-mexec-model=command 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-COMMAND %s
+// CHECK-COMMAND: clang{{.*}}" "-cc1" 

[clang] 00072c0 - [WebAssembly] Mangle the argc/argv `main` as `__wasm_argc_argv`.

2020-02-27 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2020-02-27T07:55:36-08:00
New Revision: 00072c08c75050ae2c835b7bb0e505475dbcd7b9

URL: 
https://github.com/llvm/llvm-project/commit/00072c08c75050ae2c835b7bb0e505475dbcd7b9
DIFF: 
https://github.com/llvm/llvm-project/commit/00072c08c75050ae2c835b7bb0e505475dbcd7b9.diff

LOG: [WebAssembly] Mangle the argc/argv `main` as `__wasm_argc_argv`.

WebAssembly enforces a rule that caller and callee signatures must
match. This means that the traditional technique of passing `main`
`argc` and `argv` even when it doesn't need them doesn't work.

Currently the backend renames `main` to `__original_main`, however this
doesn't interact well with LTO'ing libc, and the name isn't intuitive.
This patch allows us to transition to `__main_argc_argv` instead.

This implements the proposal in
https://github.com/WebAssembly/tool-conventions/pull/134
with a flag to disable it when targeting Emscripten, though this is
expected to be temporary, as discussed in the proposal comments.

Differential Revision: https://reviews.llvm.org/D70700

Added: 
clang/test/CodeGen/wasm-call-main.c
clang/test/CodeGen/wasm-main.c
clang/test/CodeGen/wasm-main_argc_argv.c

Modified: 
clang/lib/AST/Mangle.cpp
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/CodeGen/CodeGenModule.h
clang/lib/Frontend/InitHeaderSearch.cpp

Removed: 




diff  --git a/clang/lib/AST/Mangle.cpp b/clang/lib/AST/Mangle.cpp
index 6fd1840905b3..1a2cb29f0ec7 100644
--- a/clang/lib/AST/Mangle.cpp
+++ b/clang/lib/AST/Mangle.cpp
@@ -50,7 +50,8 @@ enum CCMangling {
   CCM_Fast,
   CCM_RegCall,
   CCM_Vector,
-  CCM_Std
+  CCM_Std,
+  CCM_WasmMainArgcArgv
 };
 
 static bool isExternC(const NamedDecl *ND) {
@@ -63,6 +64,16 @@ static CCMangling getCallingConvMangling(const ASTContext 
,
  const NamedDecl *ND) {
   const TargetInfo  = Context.getTargetInfo();
   const llvm::Triple  = TI.getTriple();
+
+  // On wasm, the argc/argv form of "main" is renamed so that the startup code
+  // can call it with the correct function signature.
+  // On Emscripten, users may be exporting "main" and expecting to call it
+  // themselves, so we can't mangle it.
+  if (Triple.isWasm() && !Triple.isOSEmscripten())
+if (const FunctionDecl *FD = dyn_cast(ND))
+  if (FD->isMain() && FD->hasPrototype() && FD->param_size() == 2)
+return CCM_WasmMainArgcArgv;
+
   if (!Triple.isOSWindows() || !Triple.isX86())
 return CCM_Other;
 
@@ -143,6 +154,12 @@ void MangleContext::mangleName(const NamedDecl *D, 
raw_ostream ) {
 
   const ASTContext  = getASTContext();
   CCMangling CC = getCallingConvMangling(ASTContext, D);
+
+  if (CC == CCM_WasmMainArgcArgv) {
+Out << "__main_argc_argv";
+return;
+  }
+
   bool MCXX = shouldMangleCXXName(D);
   const TargetInfo  = Context.getTargetInfo();
   if (CC == CCM_Other || (MCXX && TI.getCXXABI() == TargetCXXABI::Microsoft)) {

diff  --git a/clang/lib/CodeGen/CodeGenModule.cpp 
b/clang/lib/CodeGen/CodeGenModule.cpp
index 652efd857064..faff623a2973 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -448,6 +448,10 @@ void CodeGenModule::Release() {
 CodeGenFunction(*this).EmitCfiCheckStub();
   }
   emitAtAvailableLinkGuard();
+  if (Context.getTargetInfo().getTriple().isWasm() &&
+  !Context.getTargetInfo().getTriple().isOSEmscripten()) {
+EmitMainVoidAlias();
+  }
   emitLLVMUsed();
   if (SanStats)
 SanStats->finish();
@@ -5600,6 +5604,17 @@ void CodeGenModule::EmitDeferredUnusedCoverageMappings() 
{
   }
 }
 
+void CodeGenModule::EmitMainVoidAlias() {
+  // In order to transition away from "__original_main" gracefully, emit an
+  // alias for "main" in the no-argument case so that libc can detect when
+  // new-style no-argument main is in used.
+  if (llvm::Function *F = getModule().getFunction("main")) {
+if (!F->isDeclaration() && F->arg_size() == 0 && !F->isVarArg() &&
+F->getReturnType()->isIntegerTy(Context.getTargetInfo().getIntWidth()))
+  addUsedGlobal(llvm::GlobalAlias::create("__main_void", F));
+  }
+}
+
 /// Turns the given pointer into a constant.
 static llvm::Constant *GetPointerConstant(llvm::LLVMContext ,
   const void *Ptr) {

diff  --git a/clang/lib/CodeGen/CodeGenModule.h 
b/clang/lib/CodeGen/CodeGenModule.h
index e8162fcfc0cd..48a3938ceeec 100644
--- a/clang/lib/CodeGen/CodeGenModule.h
+++ b/clang/lib/CodeGen/CodeGenModule.h
@@ -1023,6 +1023,9 @@ class CodeGenModule : public CodeGenTypeCache {
   /// for the uninstrumented functions.
   void EmitDeferredUnusedCoverageMappings();
 
+  /// Emit an alias for "main" if it has no arguments (needed for wasm).
+  void EmitMainVoidAlias();
+
   /// Tell the consumer that this variable has been instantiated.
   void HandleCXXStaticMemberVarInstantiation(VarDecl *VD);
 

diff  --git 

[clang] 8f1e215 - [WebAssembly] Find wasm-opt with GetProgramPath

2019-12-02 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2019-12-02T11:48:36-08:00
New Revision: 8f1e2151b8e923345a18aa3025a7d074e134768b

URL: 
https://github.com/llvm/llvm-project/commit/8f1e2151b8e923345a18aa3025a7d074e134768b
DIFF: 
https://github.com/llvm/llvm-project/commit/8f1e2151b8e923345a18aa3025a7d074e134768b.diff

LOG: [WebAssembly] Find wasm-opt with GetProgramPath

Instead of just searching for wasm-opt in PATH, use GetProgramPath, which
checks the `COMPILER_PATH` environment variable, -B paths, and `PATH`.

Differential Revision: https://reviews.llvm.org/D70780

Added: 


Modified: 
clang/lib/Driver/ToolChains/WebAssembly.cpp

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp 
b/clang/lib/Driver/ToolChains/WebAssembly.cpp
index 55b82592c09f..1bb7c35d0c52 100644
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -92,10 +92,10 @@ void wasm::Linker::ConstructJob(Compilation , const 
JobAction ,
 
   C.addCommand(std::make_unique(JA, *this, Linker, CmdArgs, Inputs));
 
-  // When optimizing, if wasm-opt is in the PATH, run wasm-opt.
+  // When optimizing, if wasm-opt is available, run it.
   if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
-if (llvm::ErrorOr WasmOptPath =
-   llvm::sys::findProgramByName("wasm-opt")) {
+auto WasmOptPath = getToolChain().GetProgramPath("wasm-opt");
+if (WasmOptPath != "wasm-opt") {
   StringRef OOpt = "s";
   if (A->getOption().matches(options::OPT_O4) ||
   A->getOption().matches(options::OPT_Ofast))
@@ -106,7 +106,7 @@ void wasm::Linker::ConstructJob(Compilation , const 
JobAction ,
 OOpt = A->getValue();
 
   if (OOpt != "0") {
-const char *WasmOpt = Args.MakeArgString(*WasmOptPath);
+const char *WasmOpt = Args.MakeArgString(WasmOptPath);
 ArgStringList CmdArgs;
 CmdArgs.push_back(Output.getFilename());
 CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-O") + OOpt));



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 872a53e - [WebAssembly] Change the llvm-lto dir to use the LLVM Version

2019-11-25 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2019-11-25T10:29:51-08:00
New Revision: 872a53ef9489fcfbb48c6f8dd30bd9a9a026934f

URL: 
https://github.com/llvm/llvm-project/commit/872a53ef9489fcfbb48c6f8dd30bd9a9a026934f
DIFF: 
https://github.com/llvm/llvm-project/commit/872a53ef9489fcfbb48c6f8dd30bd9a9a026934f.diff

LOG: [WebAssembly] Change the llvm-lto dir to use the LLVM Version

Using the version instead of the VCS revision, which isn't available
when LLVM_APPEND_VC_REV is set. The bitcode format should be
backwards-compatible at least within a minor version, so the version
string should be sufficient.

Differential Revision: https://reviews.llvm.org/D70677

Added: 


Modified: 
clang/lib/Driver/ToolChains/WebAssembly.cpp

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp 
b/clang/lib/Driver/ToolChains/WebAssembly.cpp
index a2a9dff79e52..55b82592c09f 100644
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -118,6 +118,14 @@ void wasm::Linker::ConstructJob(Compilation , const 
JobAction ,
   }
 }
 
+/// Given a base library directory, append path components to form the
+/// LTO directory.
+static std::string AppendLTOLibDir(const std::string ) {
+// The version allows the path to be keyed to the specific version of
+// LLVM in used, as the bitcode format is not stable.
+return Dir + "/llvm-lto/" LLVM_VERSION_STRING;
+}
+
 WebAssembly::WebAssembly(const Driver , const llvm::Triple ,
  const llvm::opt::ArgList )
 : ToolChain(D, Triple, Args) {
@@ -126,26 +134,24 @@ WebAssembly::WebAssembly(const Driver , const 
llvm::Triple ,
 
   getProgramPaths().push_back(getDriver().getInstalledDir());
 
+  auto SysRoot = getDriver().SysRoot;
   if (getTriple().getOS() == llvm::Triple::UnknownOS) {
 // Theoretically an "unknown" OS should mean no standard libraries, however
 // it could also mean that a custom set of libraries is in use, so just add
 // /lib to the search path. Disable multiarch in this case, to discourage
 // paths containing "unknown" from acquiring meanings.
-getFilePaths().push_back(getDriver().SysRoot + "/lib");
+getFilePaths().push_back(SysRoot + "/lib");
   } else {
 const std::string MultiarchTriple =
-getMultiarchTriple(getDriver(), Triple, getDriver().SysRoot);
+getMultiarchTriple(getDriver(), Triple, SysRoot);
 if (D.isUsingLTO()) {
-  auto LLVMRevision = getLLVMRevision();
-  if (!LLVMRevision.empty()) {
-// For LTO, enable use of lto-enabled sysroot libraries too, if 
available.
-// Note that the directory is keyed to the LLVM revision, as LLVM's
-// bitcode format is not stable.
-getFilePaths().push_back(getDriver().SysRoot + "/lib/" + 
MultiarchTriple +
- "/llvm-lto/" + LLVMRevision);
-  }
+  // For LTO, enable use of lto-enabled sysroot libraries too, if 
available.
+  // Note that the directory is keyed to the LLVM revision, as LLVM's
+  // bitcode format is not stable.
+  auto Dir = AppendLTOLibDir(SysRoot + "/lib/" + MultiarchTriple);
+  getFilePaths().push_back(Dir);
 }
-getFilePaths().push_back(getDriver().SysRoot + "/lib/" + MultiarchTriple);
+getFilePaths().push_back(SysRoot + "/lib/" + MultiarchTriple);
   }
 }
 



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 8128289 - [WebAssembly] Use wasm-opt and LTO libraries when available.

2019-11-22 Thread Dan Gohman via cfe-commits

Author: Dan Gohman
Date: 2019-11-22T22:16:28-08:00
New Revision: 812828984c10857a4cd260eb638c52a4411f9143

URL: 
https://github.com/llvm/llvm-project/commit/812828984c10857a4cd260eb638c52a4411f9143
DIFF: 
https://github.com/llvm/llvm-project/commit/812828984c10857a4cd260eb638c52a4411f9143.diff

LOG: [WebAssembly] Use wasm-opt and LTO libraries when available.

When there's a wasm-opt in the PATH, run the it to optimize LLVM's
output. This fixes PR43796.

And, add an "llvm-lto" directory to the sysroot library search paths,
so that sysroots can provide LTO-enabled system libraries.

Differential Revision: https://reviews.llvm.org/D70500

Added: 
clang/test/Driver/wasm-toolchain-lto.c

Modified: 
clang/lib/Driver/ToolChains/WebAssembly.cpp

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp 
b/clang/lib/Driver/ToolChains/WebAssembly.cpp
index ab648025f222..a2a9dff79e52 100644
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -8,6 +8,7 @@
 
 #include "WebAssembly.h"
 #include "CommonArgs.h"
+#include "clang/Basic/Version.h"
 #include "clang/Config/config.h"
 #include "clang/Driver/Compilation.h"
 #include "clang/Driver/Driver.h"
@@ -90,6 +91,31 @@ void wasm::Linker::ConstructJob(Compilation , const 
JobAction ,
   CmdArgs.push_back(Output.getFilename());
 
   C.addCommand(std::make_unique(JA, *this, Linker, CmdArgs, Inputs));
+
+  // When optimizing, if wasm-opt is in the PATH, run wasm-opt.
+  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
+if (llvm::ErrorOr WasmOptPath =
+   llvm::sys::findProgramByName("wasm-opt")) {
+  StringRef OOpt = "s";
+  if (A->getOption().matches(options::OPT_O4) ||
+  A->getOption().matches(options::OPT_Ofast))
+OOpt = "4";
+  else if (A->getOption().matches(options::OPT_O0))
+OOpt = "0";
+  else if (A->getOption().matches(options::OPT_O))
+OOpt = A->getValue();
+
+  if (OOpt != "0") {
+const char *WasmOpt = Args.MakeArgString(*WasmOptPath);
+ArgStringList CmdArgs;
+CmdArgs.push_back(Output.getFilename());
+CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-O") + OOpt));
+CmdArgs.push_back("-o");
+CmdArgs.push_back(Output.getFilename());
+C.addCommand(std::make_unique(JA, *this, WasmOpt, CmdArgs, 
Inputs));
+  }
+}
+  }
 }
 
 WebAssembly::WebAssembly(const Driver , const llvm::Triple ,
@@ -109,6 +135,16 @@ WebAssembly::WebAssembly(const Driver , const 
llvm::Triple ,
   } else {
 const std::string MultiarchTriple =
 getMultiarchTriple(getDriver(), Triple, getDriver().SysRoot);
+if (D.isUsingLTO()) {
+  auto LLVMRevision = getLLVMRevision();
+  if (!LLVMRevision.empty()) {
+// For LTO, enable use of lto-enabled sysroot libraries too, if 
available.
+// Note that the directory is keyed to the LLVM revision, as LLVM's
+// bitcode format is not stable.
+getFilePaths().push_back(getDriver().SysRoot + "/lib/" + 
MultiarchTriple +
+ "/llvm-lto/" + LLVMRevision);
+  }
+}
 getFilePaths().push_back(getDriver().SysRoot + "/lib/" + MultiarchTriple);
   }
 }

diff  --git a/clang/test/Driver/wasm-toolchain-lto.c 
b/clang/test/Driver/wasm-toolchain-lto.c
new file mode 100644
index ..216207316f3d
--- /dev/null
+++ b/clang/test/Driver/wasm-toolchain-lto.c
@@ -0,0 +1,6 @@
+// A basic C link command-line with optimization with known OS and LTO enabled.
+
+// RUN: %clang -### -O2 -flto -no-canonical-prefixes -target wasm32-wasi 
--sysroot=/foo %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=LINK_OPT_KNOWN %s
+// LINK_OPT_KNOWN: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
+// LINK_OPT_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi/llvm-lto/



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r359630 - [WebAssembly] Use the "wasm32-wasi" triple in tests

2019-04-30 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Apr 30 16:06:07 2019
New Revision: 359630

URL: http://llvm.org/viewvc/llvm-project?rev=359630=rev
Log:
[WebAssembly] Use the "wasm32-wasi" triple in tests

Similar to https://reviews.llvm.org/D61334, update clang tests to use the
"wasm32-wasi" triple, removing the "-musl" environment and omitting the
"-unknown" vendor.

Differential Revision: https://reviews.llvm.org/D61338

Reviewer: sbc100

Modified:
cfe/trunk/test/Driver/wasm-toolchain.c
cfe/trunk/test/Driver/wasm-toolchain.cpp
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=359630=359629=359630=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Tue Apr 30 16:06:07 2019
@@ -24,20 +24,20 @@
 
 // A basic C link command-line with known OS.
 
-// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-wasi-musl 
--sysroot=/foo %s 2>&1 | FileCheck -check-prefix=LINK_KNOWN %s
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-wasi --sysroot=/foo 
%s 2>&1 | FileCheck -check-prefix=LINK_KNOWN %s
 // LINK_KNOWN: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
-// LINK_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi-musl" "crt1.o" 
"[[temp]]" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
+// LINK_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi" "crt1.o" "[[temp]]" 
"-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
 
 // A basic C link command-line with optimization with known OS.
 
-// RUN: %clang -### -O2 -no-canonical-prefixes -target 
wasm32-unknown-wasi-musl --sysroot=/foo %s 2>&1 | FileCheck 
-check-prefix=LINK_OPT_KNOWN %s
+// RUN: %clang -### -O2 -no-canonical-prefixes -target wasm32-wasi 
--sysroot=/foo %s 2>&1 | FileCheck -check-prefix=LINK_OPT_KNOWN %s
 // LINK_OPT_KNOWN: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
-// LINK_OPT_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi-musl" "crt1.o" 
"[[temp]]" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
+// LINK_OPT_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi" "crt1.o" "[[temp]]" 
"-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
 
 // A basic C compile command-line with known OS.
 
-// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-wasi-musl 
--sysroot=/foo %s 2>&1 | FileCheck -check-prefix=COMPILE %s
-// COMPILE: clang{{.*}}" "-cc1" {{.*}} "-internal-isystem" 
"/foo/include/wasm32-wasi-musl" "-internal-isystem" "/foo/include"
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-wasi --sysroot=/foo 
%s 2>&1 | FileCheck -check-prefix=COMPILE %s
+// COMPILE: clang{{.*}}" "-cc1" {{.*}} "-internal-isystem" 
"/foo/include/wasm32-wasi" "-internal-isystem" "/foo/include"
 
 // Thread-related command line tests.
 

Modified: cfe/trunk/test/Driver/wasm-toolchain.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.cpp?rev=359630=359629=359630=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.cpp (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.cpp Tue Apr 30 16:06:07 2019
@@ -24,17 +24,17 @@
 
 // A basic C++ link command-line with known OS.
 
-// RUN: %clangxx -### -no-canonical-prefixes -target wasm32-unknown-wasi-musl 
--sysroot=/foo --stdlib=c++ %s 2>&1 | FileCheck -check-prefix=LINK_KNOWN %s
+// RUN: %clangxx -### -no-canonical-prefixes -target wasm32-wasi 
--sysroot=/foo --stdlib=c++ %s 2>&1 | FileCheck -check-prefix=LINK_KNOWN %s
 // LINK_KNOWN: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
-// LINK_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi-musl" "crt1.o" 
"[[temp]]" "-lc++" "-lc++abi" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" 
"-o" "a.out"
+// LINK_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi" "crt1.o" "[[temp]]" 
"-lc++" "-lc++abi" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
 
 // A basic C++ link command-line with optimization with known OS.
 
-// RUN: %clangxx -### -O2 -no-canonical-prefixes -target 
wasm32-unknown-wasi-musl --sysroot=/foo %s --stdlib=c++ 2>&1 | FileCheck 
-check-prefix=LINK_OPT_KNOWN %s
+// RUN: %clangxx -### -O2 -no-canonical-prefixes -target wasm32-wasi 
--sysroot=/foo %s --stdlib=c++ 2>&1 | FileCheck -check-prefix=LINK_OPT_KNOWN %s
 // LINK_OPT_KNOWN: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
-// LINK_OPT_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi-musl" "crt1.o" 
"[[temp]]" "-lc++" "-lc++abi" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" 
"-o" "a.out"
+// LINK_OPT_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi" "crt1.o" "[[temp]]" 
"-lc++" "-lc++abi" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
 
 // A basic C++ compile command-line with known OS.
 
-// RUN: %clangxx -### -no-canonical-prefixes -target wasm32-unknown-wasi-musl 
--sysroot=/foo 

Re: r352930 - [WebAssembly] Add an import_field function attribute

2019-03-18 Thread Dan Gohman via cfe-commits
On Fri, Mar 15, 2019 at 10:55 AM Aaron Ballman 
wrote:

>
> Ping.
>

I apologize for the extraordinarily delays here. I've now posted a patch to
address the review comments here:

https://reviews.llvm.org/D59520

Dan
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r352930 - [WebAssembly] Add an import_field function attribute

2019-02-05 Thread Dan Gohman via cfe-commits
On Tue, Feb 5, 2019 at 11:20 AM Aaron Ballman 
wrote:

> On Fri, Feb 1, 2019 at 8:27 PM Dan Gohman  wrote:
> >
> >
> >  Indeed, and the existing import_module attribute needs these tests as
> well. I'll write some and add them in a follow-up patch.
> >
> > Thanks for the review!
>
> Any time! I haven't seen that follow-up patch yet though; did it fall
> off your radar?
>

Yes, it's still on my radar.

Dan
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r352930 - [WebAssembly] Add an import_field function attribute

2019-02-01 Thread Dan Gohman via cfe-commits
On Fri, Feb 1, 2019 at 2:31 PM Aaron Ballman  wrote:

> On Fri, Feb 1, 2019 at 5:25 PM Dan Gohman via cfe-commits
>  wrote:
> >
> > Author: djg
> > Date: Fri Feb  1 14:25:23 2019
> > New Revision: 352930
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=352930=rev
> > Log:
> > [WebAssembly] Add an import_field function attribute
> >
> > This is similar to import_module, but sets the import field name
> > instead.
> >
> > By default, the import field name is the same as the C/asm/.o symbol
> > name. However, there are situations where it's useful to have it be
> > different. For example, suppose I have a wasm API with a module named
> > "pwsix" and a field named "read". There's no risk of namespace
> > collisions with user code at the wasm level because the generic name
> > "read" is qualified by the module name "pwsix". However in the C/asm/.o
> > namespaces, the module name is not used, so if I have a global function
> > named "read", it is intruding on the user's namespace.
> >
> > With the import_field module, I can declare my function (in libc) to be
> > "__read", and then set the wasm import module to be "pwsix" and the wasm
> > import field to be "read". So at the C/asm/.o levels, my symbol is
> > outside the user namespace.
> >
> > Differential Revision: https://reviews.llvm.org/D57602
>
> Btw, this review never went to cfe-commits, but it should have. :-)
>

Yes, my mistake.


>
> > Added:
> > cfe/trunk/test/CodeGen/wasm-import-name.c
> >   - copied, changed from r352781,
> cfe/trunk/test/CodeGen/wasm-import-module.c
> > Modified:
> > cfe/trunk/include/clang/Basic/Attr.td
> > cfe/trunk/include/clang/Basic/AttrDocs.td
> > cfe/trunk/lib/CodeGen/TargetInfo.cpp
> > cfe/trunk/lib/Sema/SemaDeclAttr.cpp
> > cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test
> >
> > Modified: cfe/trunk/include/clang/Basic/Attr.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=352930=352929=352930=diff
> >
> ==
> > --- cfe/trunk/include/clang/Basic/Attr.td (original)
> > +++ cfe/trunk/include/clang/Basic/Attr.td Fri Feb  1 14:25:23 2019
> > @@ -1514,11 +1514,19 @@ def AMDGPUNumVGPR : InheritableAttr {
> >  def WebAssemblyImportModule : InheritableAttr,
> >TargetSpecificAttr {
> >let Spellings = [Clang<"import_module">];
> > -  let Args = [StringArgument<"ImportModuleName">];
> > +  let Args = [StringArgument<"ImportModule">];
> >let Documentation = [WebAssemblyImportModuleDocs];
> >let Subjects = SubjectList<[Function], ErrorDiag>;
> >  }
> >
> > +def WebAssemblyImportName : InheritableAttr,
> > +TargetSpecificAttr {
> > +  let Spellings = [Clang<"import_name">];
> > +  let Args = [StringArgument<"ImportName">];
> > +  let Documentation = [WebAssemblyImportNameDocs];
> > +  let Subjects = SubjectList<[Function], ErrorDiag>;
> > +}
> > +
> >  def NoSplitStack : InheritableAttr {
> >let Spellings = [GCC<"no_split_stack">];
> >let Subjects = SubjectList<[Function], ErrorDiag>;
> >
> > Modified: cfe/trunk/include/clang/Basic/AttrDocs.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=352930=352929=352930=diff
> >
> ==
> > --- cfe/trunk/include/clang/Basic/AttrDocs.td (original)
> > +++ cfe/trunk/include/clang/Basic/AttrDocs.td Fri Feb  1 14:25:23 2019
> > @@ -3730,6 +3730,23 @@ reuqest a specific module name be used i
> >}];
> >  }
> >
> > +def WebAssemblyImportNameDocs : Documentation {
> > +  let Category = DocCatFunction;
> > +  let Content = [{
> > +Clang supports the ``__attribute__((import_name()))``
> > +attribute for the WebAssembly target. This attribute may be attached to
> a
> > +function declaration, where it modifies how the symbol is to be imported
> > +within the WebAssembly linking environment.
> > +
> > +WebAssembly imports use a two-level namespace scheme, consisting of a
> module
> > +name, which typically identifies a module from which to import, and a
> field
> > +name, which typically identifies a field from tha

r352936 - [WebAssembly] Fix ImportName's position in this test.

2019-02-01 Thread Dan Gohman via cfe-commits
Author: djg
Date: Fri Feb  1 14:52:29 2019
New Revision: 352936

URL: http://llvm.org/viewvc/llvm-project?rev=352936=rev
Log:
[WebAssembly] Fix ImportName's position in this test.

This is a follow-up to r352930.


Modified:
cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test

Modified: cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test?rev=352936=352935=352936=diff
==
--- cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test 
(original)
+++ cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test Fri Feb 
 1 14:52:29 2019
@@ -138,8 +138,8 @@
 // CHECK-NEXT: WarnUnusedResult (SubjectMatchRule_objc_method, 
SubjectMatchRule_enum, SubjectMatchRule_record, 
SubjectMatchRule_hasType_functionType)
 // CHECK-NEXT: Weak (SubjectMatchRule_variable, SubjectMatchRule_function, 
SubjectMatchRule_record)
 // CHECK-NEXT: WeakRef (SubjectMatchRule_variable, SubjectMatchRule_function)
-// CHECK-NEXT: WebAssemblyImportName (SubjectMatchRule_function)
 // CHECK-NEXT: WebAssemblyImportModule (SubjectMatchRule_function)
+// CHECK-NEXT: WebAssemblyImportName (SubjectMatchRule_function)
 // CHECK-NEXT: WorkGroupSizeHint (SubjectMatchRule_function)
 // CHECK-NEXT: XRayInstrument (SubjectMatchRule_function, 
SubjectMatchRule_objc_method)
 // CHECK-NEXT: XRayLogArgs (SubjectMatchRule_function, 
SubjectMatchRule_objc_method)


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r352930 - [WebAssembly] Add an import_field function attribute

2019-02-01 Thread Dan Gohman via cfe-commits
Author: djg
Date: Fri Feb  1 14:25:23 2019
New Revision: 352930

URL: http://llvm.org/viewvc/llvm-project?rev=352930=rev
Log:
[WebAssembly] Add an import_field function attribute

This is similar to import_module, but sets the import field name
instead.

By default, the import field name is the same as the C/asm/.o symbol
name. However, there are situations where it's useful to have it be
different. For example, suppose I have a wasm API with a module named
"pwsix" and a field named "read". There's no risk of namespace
collisions with user code at the wasm level because the generic name
"read" is qualified by the module name "pwsix". However in the C/asm/.o
namespaces, the module name is not used, so if I have a global function
named "read", it is intruding on the user's namespace.

With the import_field module, I can declare my function (in libc) to be
"__read", and then set the wasm import module to be "pwsix" and the wasm
import field to be "read". So at the C/asm/.o levels, my symbol is
outside the user namespace.

Differential Revision: https://reviews.llvm.org/D57602

Added:
cfe/trunk/test/CodeGen/wasm-import-name.c
  - copied, changed from r352781, 
cfe/trunk/test/CodeGen/wasm-import-module.c
Modified:
cfe/trunk/include/clang/Basic/Attr.td
cfe/trunk/include/clang/Basic/AttrDocs.td
cfe/trunk/lib/CodeGen/TargetInfo.cpp
cfe/trunk/lib/Sema/SemaDeclAttr.cpp
cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test

Modified: cfe/trunk/include/clang/Basic/Attr.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=352930=352929=352930=diff
==
--- cfe/trunk/include/clang/Basic/Attr.td (original)
+++ cfe/trunk/include/clang/Basic/Attr.td Fri Feb  1 14:25:23 2019
@@ -1514,11 +1514,19 @@ def AMDGPUNumVGPR : InheritableAttr {
 def WebAssemblyImportModule : InheritableAttr,
   TargetSpecificAttr {
   let Spellings = [Clang<"import_module">];
-  let Args = [StringArgument<"ImportModuleName">];
+  let Args = [StringArgument<"ImportModule">];
   let Documentation = [WebAssemblyImportModuleDocs];
   let Subjects = SubjectList<[Function], ErrorDiag>;
 }
 
+def WebAssemblyImportName : InheritableAttr,
+TargetSpecificAttr {
+  let Spellings = [Clang<"import_name">];
+  let Args = [StringArgument<"ImportName">];
+  let Documentation = [WebAssemblyImportNameDocs];
+  let Subjects = SubjectList<[Function], ErrorDiag>;
+}
+
 def NoSplitStack : InheritableAttr {
   let Spellings = [GCC<"no_split_stack">];
   let Subjects = SubjectList<[Function], ErrorDiag>;

Modified: cfe/trunk/include/clang/Basic/AttrDocs.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=352930=352929=352930=diff
==
--- cfe/trunk/include/clang/Basic/AttrDocs.td (original)
+++ cfe/trunk/include/clang/Basic/AttrDocs.td Fri Feb  1 14:25:23 2019
@@ -3730,6 +3730,23 @@ reuqest a specific module name be used i
   }];
 }
 
+def WebAssemblyImportNameDocs : Documentation {
+  let Category = DocCatFunction;
+  let Content = [{
+Clang supports the ``__attribute__((import_name()))`` 
+attribute for the WebAssembly target. This attribute may be attached to a
+function declaration, where it modifies how the symbol is to be imported
+within the WebAssembly linking environment.
+
+WebAssembly imports use a two-level namespace scheme, consisting of a module
+name, which typically identifies a module from which to import, and a field
+name, which typically identifies a field from that module to import. By
+default, field names for C/C++ symbols are the same as their C/C++ symbol
+names. This attribute can be used to override the default behavior, and
+reuqest a specific field name be used instead.
+  }];
+}
+
 def ArtificialDocs : Documentation {
   let Category = DocCatFunction;
   let Content = [{

Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=352930=352929=352930=diff
==
--- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Fri Feb  1 14:25:23 2019
@@ -765,7 +765,13 @@ public:
   if (const auto *Attr = FD->getAttr()) {
 llvm::Function *Fn = cast(GV);
 llvm::AttrBuilder B;
-B.addAttribute("wasm-import-module", Attr->getImportModuleName());
+B.addAttribute("wasm-import-module", Attr->getImportModule());
+Fn->addAttributes(llvm::AttributeList::FunctionIndex, B);
+  }
+  if (const auto *Attr = FD->getAttr()) {
+llvm::Function *Fn = cast(GV);
+llvm::AttrBuilder B;
+B.addAttribute("wasm-import-name", Attr->getImportName());
 Fn->addAttributes(llvm::AttributeList::FunctionIndex, B);
  

r352108 - [WebAssembly] Add WebAssemblyImportModule to pragma-attribute-supported-attributes-list.test

2019-01-24 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Jan 24 13:20:03 2019
New Revision: 352108

URL: http://llvm.org/viewvc/llvm-project?rev=352108=rev
Log:
[WebAssembly] Add WebAssemblyImportModule to 
pragma-attribute-supported-attributes-list.test

Modified:
cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test

Modified: cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test?rev=352108=352107=352108=diff
==
--- cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test 
(original)
+++ cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test Thu Jan 
24 13:20:03 2019
@@ -138,6 +138,7 @@
 // CHECK-NEXT: WarnUnusedResult (SubjectMatchRule_objc_method, 
SubjectMatchRule_enum, SubjectMatchRule_record, 
SubjectMatchRule_hasType_functionType)
 // CHECK-NEXT: Weak (SubjectMatchRule_variable, SubjectMatchRule_function, 
SubjectMatchRule_record)
 // CHECK-NEXT: WeakRef (SubjectMatchRule_variable, SubjectMatchRule_function)
+// CHECK-NEXT: WebAssemblyImportModule (SubjectMatchRule_function)
 // CHECK-NEXT: WorkGroupSizeHint (SubjectMatchRule_function)
 // CHECK-NEXT: XRayInstrument (SubjectMatchRule_function, 
SubjectMatchRule_objc_method)
 // CHECK-NEXT: XRayLogArgs (SubjectMatchRule_function, 
SubjectMatchRule_objc_method)


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r352106 - [WebAssembly] Add an import_module function attribute

2019-01-24 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Jan 24 13:08:30 2019
New Revision: 352106

URL: http://llvm.org/viewvc/llvm-project?rev=352106=rev
Log:
[WebAssembly] Add an import_module function attribute

This adds a C/C++ attribute which corresponds to the LLVM IR wasm-import-module
attribute. It allows code to specify an explicit import module.

Differential Revision: https://reviews.llvm.org/D57160

Added:
cfe/trunk/test/CodeGen/wasm-import-module.c
Modified:
cfe/trunk/include/clang/Basic/Attr.td
cfe/trunk/include/clang/Basic/AttrDocs.td
cfe/trunk/lib/CodeGen/TargetInfo.cpp
cfe/trunk/lib/Sema/SemaDeclAttr.cpp

Modified: cfe/trunk/include/clang/Basic/Attr.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=352106=352105=352106=diff
==
--- cfe/trunk/include/clang/Basic/Attr.td (original)
+++ cfe/trunk/include/clang/Basic/Attr.td Thu Jan 24 13:08:30 2019
@@ -331,6 +331,7 @@ def TargetMSP430 : TargetArch<["msp430"]
 def TargetRISCV : TargetArch<["riscv32", "riscv64"]>;
 def TargetX86 : TargetArch<["x86"]>;
 def TargetAnyX86 : TargetArch<["x86", "x86_64"]>;
+def TargetWebAssembly : TargetArch<["wasm32", "wasm64"]>;
 def TargetWindows : TargetArch<["x86", "x86_64", "arm", "thumb", "aarch64"]> {
   let OSes = ["Win32"];
 }
@@ -1510,6 +1511,14 @@ def AMDGPUNumVGPR : InheritableAttr {
   let Subjects = SubjectList<[Function], ErrorDiag, "kernel functions">;
 }
 
+def WebAssemblyImportModule : InheritableAttr,
+  TargetSpecificAttr {
+  let Spellings = [Clang<"import_module">];
+  let Args = [StringArgument<"ImportModuleName">];
+  let Documentation = [WebAssemblyImportModuleDocs];
+  let Subjects = SubjectList<[Function], ErrorDiag>;
+}
+
 def NoSplitStack : InheritableAttr {
   let Spellings = [GCC<"no_split_stack">];
   let Subjects = SubjectList<[Function], ErrorDiag>;

Modified: cfe/trunk/include/clang/Basic/AttrDocs.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=352106=352105=352106=diff
==
--- cfe/trunk/include/clang/Basic/AttrDocs.td (original)
+++ cfe/trunk/include/clang/Basic/AttrDocs.td Thu Jan 24 13:08:30 2019
@@ -3711,7 +3711,23 @@ definition (
 For more information see
 `gcc documentation 
`_
 or `msvc documentation `_.
-}];
+}]; }
+
+def WebAssemblyImportModuleDocs : Documentation {
+  let Category = DocCatFunction;
+  let Content = [{
+Clang supports the ``__attribute__((import_module()))`` 
+attribute for the WebAssembly target. This attribute may be attached to a
+function declaration, where it modifies how the symbol is to be imported
+within the WebAssembly linking environment.
+
+WebAssembly imports use a two-level namespace scheme, consisting of a module
+name, which typically identifies a module from which to import, and a field
+name, which typically identifies a field from that module to import. By
+default, module names for C/C++ symbols are assigned automatically by the
+linker. This attribute can be used to override the default behavior, and
+reuqest a specific module name be used instead.
+  }];
 }
 
 def ArtificialDocs : Documentation {

Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=352106=352105=352106=diff
==
--- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Thu Jan 24 13:08:30 2019
@@ -760,6 +760,16 @@ public:
 
   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
CodeGen::CodeGenModule ) const override {
+TargetCodeGenInfo::setTargetAttributes(D, GV, CGM);
+if (const auto *FD = dyn_cast_or_null(D)) {
+  if (const auto *Attr = FD->getAttr()) {
+llvm::Function *Fn = cast(GV);
+llvm::AttrBuilder B;
+B.addAttribute("wasm-import-module", Attr->getImportModuleName());
+Fn->addAttributes(llvm::AttributeList::FunctionIndex, B);
+  }
+}
+
 if (auto *FD = dyn_cast_or_null(D)) {
   llvm::Function *Fn = cast(GV);
   if (!FD->doesThisDeclarationHaveABody() && !FD->hasPrototype())

Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=352106=352105=352106=diff
==
--- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Thu Jan 24 13:08:30 2019
@@ -5709,6 +5709,28 @@ static void handleAVRSignalAttr(Sema ,
   handleSimpleAttribute(S, D, AL);
 }
 
+static void handleWebAssemblyImportModuleAttr(Sema , Decl *D, const 

r352105 - [WebAssembly] Add a __wasi__ target macro

2019-01-24 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Jan 24 13:05:11 2019
New Revision: 352105

URL: http://llvm.org/viewvc/llvm-project?rev=352105=rev
Log:
[WebAssembly] Add a __wasi__ target macro

This adds a `__wasi__` macro for the wasi OS, similar to `__linux__` etc. for
other OS's.

Differential Revision: https://reviews.llvm.org/D57155

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/lib/Basic/Targets/OSTargets.h
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=352105=352104=352105=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Thu Jan 24 13:05:11 2019
@@ -569,19 +569,27 @@ TargetInfo *AllocateTarget(const llvm::T
 Triple.getVendor() != llvm::Triple::UnknownVendor ||
 !Triple.isOSBinFormatWasm())
   return nullptr;
-if (Triple.getOS() != llvm::Triple::UnknownOS &&
-Triple.getOS() != llvm::Triple::WASI)
-  return nullptr;
-return new WebAssemblyOSTargetInfo(Triple, Opts);
+switch (Triple.getOS()) {
+  case llvm::Triple::WASI:
+return new WASITargetInfo(Triple, Opts);
+  case llvm::Triple::UnknownOS:
+return new WebAssemblyOSTargetInfo(Triple, 
Opts);
+  default:
+return nullptr;
+}
   case llvm::Triple::wasm64:
 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
 Triple.getVendor() != llvm::Triple::UnknownVendor ||
 !Triple.isOSBinFormatWasm())
   return nullptr;
-if (Triple.getOS() != llvm::Triple::UnknownOS &&
-Triple.getOS() != llvm::Triple::WASI)
-  return nullptr;
-return new WebAssemblyOSTargetInfo(Triple, Opts);
+switch (Triple.getOS()) {
+  case llvm::Triple::WASI:
+return new WASITargetInfo(Triple, Opts);
+  case llvm::Triple::UnknownOS:
+return new WebAssemblyOSTargetInfo(Triple, 
Opts);
+  default:
+return nullptr;
+}
 
   case llvm::Triple::renderscript32:
 return new LinuxTargetInfo(Triple, Opts);

Modified: cfe/trunk/lib/Basic/Targets/OSTargets.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.h?rev=352105=352104=352105=diff
==
--- cfe/trunk/lib/Basic/Targets/OSTargets.h (original)
+++ cfe/trunk/lib/Basic/Targets/OSTargets.h Thu Jan 24 13:05:11 2019
@@ -763,8 +763,9 @@ public:
 template 
 class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo
 : public OSTargetInfo {
+protected:
   void getOSDefines(const LangOptions , const llvm::Triple ,
-MacroBuilder ) const final {
+MacroBuilder ) const {
 // A common platform macro.
 if (Opts.POSIXThreads)
   Builder.defineMacro("_REENTRANT");
@@ -785,6 +786,21 @@ public:
   }
 };
 
+// WASI target
+template 
+class LLVM_LIBRARY_VISIBILITY WASITargetInfo
+: public WebAssemblyOSTargetInfo {
+  void getOSDefines(const LangOptions , const llvm::Triple ,
+MacroBuilder ) const final {
+WebAssemblyOSTargetInfo::getOSDefines(Opts, Triple, Builder);
+Builder.defineMacro("__wasi__");
+  }
+
+public:
+  explicit WASITargetInfo(const llvm::Triple , const TargetOptions 
)
+  : WebAssemblyOSTargetInfo(Triple, Opts) {}
+};
+
 } // namespace targets
 } // namespace clang
 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H

Modified: cfe/trunk/test/Preprocessor/init.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=352105=352104=352105=diff
==
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Thu Jan 24 13:05:11 2019
@@ -9114,6 +9114,12 @@
 // RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm64-unknown-unknown \
 // RUN:   < /dev/null \
 // RUN:   | FileCheck -match-full-lines 
-check-prefixes=WEBASSEMBLY,WEBASSEMBLY64 %s
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-wasi \
+// RUN:   < /dev/null \
+// RUN:   | FileCheck -match-full-lines 
-check-prefixes=WEBASSEMBLY,WEBASSEMBLY32,WEBASSEMBLY-WASI %s
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm64-unknown-wasi \
+// RUN:   < /dev/null \
+// RUN:   | FileCheck -match-full-lines 
-check-prefixes=WEBASSEMBLY,WEBASSEMBLY64,WEBASSEMBLY-WASI %s
 //
 // WEBASSEMBLY32:#define _ILP32 1
 // WEBASSEMBLY32-NOT:#define _LP64
@@ -9468,6 +9474,7 @@
 // WEBASSEMBLY-NEXT:#define __llvm__ 1
 // WEBASSEMBLY-NOT:#define __unix
 // WEBASSEMBLY-NOT:#define __unix__
+// WEBASSEMBLY-WASI-NEXT:#define __wasi__ 1
 // WEBASSEMBLY-NOT:#define __wasm_simd128__
 // WEBASSEMBLY-NOT:#define __wasm_simd256__
 // WEBASSEMBLY-NOT:#define __wasm_simd512__


___
cfe-commits mailing list
cfe-commits@lists.llvm.org

r352100 - [WebAssembly] Support __float128

2019-01-24 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Jan 24 12:33:28 2019
New Revision: 352100

URL: http://llvm.org/viewvc/llvm-project?rev=352100=rev
Log:
[WebAssembly] Support __float128

This enables support for the "__float128" keyword.

Differential Revision: https://reviews.llvm.org/D57154

Modified:
cfe/trunk/lib/Basic/Targets/OSTargets.h
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/lib/Basic/Targets/OSTargets.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.h?rev=352100=352099=352100=diff
==
--- cfe/trunk/lib/Basic/Targets/OSTargets.h (original)
+++ cfe/trunk/lib/Basic/Targets/OSTargets.h Thu Jan 24 12:33:28 2019
@@ -771,6 +771,8 @@ class LLVM_LIBRARY_VISIBILITY WebAssembl
 // Follow g++ convention and predefine _GNU_SOURCE for C++.
 if (Opts.CPlusPlus)
   Builder.defineMacro("_GNU_SOURCE");
+// Indicate that we have __float128.
+Builder.defineMacro("__FLOAT128__");
   }
 
 public:
@@ -779,6 +781,7 @@ public:
   : OSTargetInfo(Triple, Opts) {
 this->MCountName = "__mcount";
 this->TheCXXABI.set(TargetCXXABI::WebAssembly);
+this->HasFloat128 = true;
   }
 };
 

Modified: cfe/trunk/test/Preprocessor/init.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=352100=352099=352100=diff
==
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Thu Jan 24 12:33:28 2019
@@ -9159,6 +9159,7 @@
 // WEBASSEMBLY-NEXT:#define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__
 // WEBASSEMBLY-NOT:#define __ELF__
 // WEBASSEMBLY-NEXT:#define __FINITE_MATH_ONLY__ 0
+// WEBASSEMBLY-NEXT:#define __FLOAT128__ 1
 // WEBASSEMBLY-NEXT:#define __FLT16_DECIMAL_DIG__ 5
 // WEBASSEMBLY-NEXT:#define __FLT16_DENORM_MIN__ 5.9604644775390625e-8F16
 // WEBASSEMBLY-NEXT:#define __FLT16_DIG__ 3


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r352099 - [WebAssembly] Factor commonality between wasm32 and wasm64 in test/Preprocessor/init.c

2019-01-24 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Jan 24 12:31:11 2019
New Revision: 352099

URL: http://llvm.org/viewvc/llvm-project?rev=352099=rev
Log:
[WebAssembly] Factor commonality between wasm32 and wasm64 in 
test/Preprocessor/init.c

Use the -check-prefixes= feature to merge most of the WEBASSEMBLY32 and
WEBASSEMBLY64 test checks into a shared WEBASSEMBLY test check.

Differential Revision: https://reviews.llvm.org/D57153

Modified:
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/test/Preprocessor/init.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=352099=352098=352099=diff
==
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Thu Jan 24 12:31:11 2019
@@ -9110,667 +9110,376 @@
 //
 // RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-unknown \
 // RUN:   < /dev/null \
-// RUN:   | FileCheck -match-full-lines -check-prefix=WEBASSEMBLY32 %s
+// RUN:   | FileCheck -match-full-lines 
-check-prefixes=WEBASSEMBLY,WEBASSEMBLY32 %s
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm64-unknown-unknown \
+// RUN:   < /dev/null \
+// RUN:   | FileCheck -match-full-lines 
-check-prefixes=WEBASSEMBLY,WEBASSEMBLY64 %s
 //
 // WEBASSEMBLY32:#define _ILP32 1
 // WEBASSEMBLY32-NOT:#define _LP64
-// WEBASSEMBLY32-NEXT:#define __ATOMIC_ACQUIRE 2
-// WEBASSEMBLY32-NEXT:#define __ATOMIC_ACQ_REL 4
-// WEBASSEMBLY32-NEXT:#define __ATOMIC_CONSUME 1
-// WEBASSEMBLY32-NEXT:#define __ATOMIC_RELAXED 0
-// WEBASSEMBLY32-NEXT:#define __ATOMIC_RELEASE 3
-// WEBASSEMBLY32-NEXT:#define __ATOMIC_SEQ_CST 5
-// WEBASSEMBLY32-NEXT:#define __BIGGEST_ALIGNMENT__ 16
-// WEBASSEMBLY32-NEXT:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
-// WEBASSEMBLY32-NEXT:#define __CHAR16_TYPE__ unsigned short
-// WEBASSEMBLY32-NEXT:#define __CHAR32_TYPE__ unsigned int
-// WEBASSEMBLY32-NEXT:#define __CHAR_BIT__ 8
-// WEBASSEMBLY32-NOT:#define __CHAR_UNSIGNED__
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_BOOL_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_CHAR16_T_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_CHAR32_T_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_CHAR_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_INT_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_LLONG_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_LONG_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_POINTER_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_SHORT_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_WCHAR_T_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CONSTANT_CFSTRINGS__ 1
-// WEBASSEMBLY32-NEXT:#define __DBL_DECIMAL_DIG__ 17
-// WEBASSEMBLY32-NEXT:#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
-// WEBASSEMBLY32-NEXT:#define __DBL_DIG__ 15
-// WEBASSEMBLY32-NEXT:#define __DBL_EPSILON__ 2.2204460492503131e-16
-// WEBASSEMBLY32-NEXT:#define __DBL_HAS_DENORM__ 1
-// WEBASSEMBLY32-NEXT:#define __DBL_HAS_INFINITY__ 1
-// WEBASSEMBLY32-NEXT:#define __DBL_HAS_QUIET_NAN__ 1
-// WEBASSEMBLY32-NEXT:#define __DBL_MANT_DIG__ 53
-// WEBASSEMBLY32-NEXT:#define __DBL_MAX_10_EXP__ 308
-// WEBASSEMBLY32-NEXT:#define __DBL_MAX_EXP__ 1024
-// WEBASSEMBLY32-NEXT:#define __DBL_MAX__ 1.7976931348623157e+308
-// WEBASSEMBLY32-NEXT:#define __DBL_MIN_10_EXP__ (-307)
-// WEBASSEMBLY32-NEXT:#define __DBL_MIN_EXP__ (-1021)
-// WEBASSEMBLY32-NEXT:#define __DBL_MIN__ 2.2250738585072014e-308
-// WEBASSEMBLY32-NEXT:#define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__
-// WEBASSEMBLY32-NOT:#define __ELF__
-// WEBASSEMBLY32-NEXT:#define __FINITE_MATH_ONLY__ 0
-// WEBASSEMBLY32:#define __FLT_DECIMAL_DIG__ 9
-// WEBASSEMBLY32-NEXT:#define __FLT_DENORM_MIN__ 1.40129846e-45F
-// WEBASSEMBLY32-NEXT:#define __FLT_DIG__ 6
-// WEBASSEMBLY32-NEXT:#define __FLT_EPSILON__ 1.19209290e-7F
-// WEBASSEMBLY32-NEXT:#define __FLT_EVAL_METHOD__ 0
-// WEBASSEMBLY32-NEXT:#define __FLT_HAS_DENORM__ 1
-// WEBASSEMBLY32-NEXT:#define __FLT_HAS_INFINITY__ 1
-// WEBASSEMBLY32-NEXT:#define __FLT_HAS_QUIET_NAN__ 1
-// WEBASSEMBLY32-NEXT:#define __FLT_MANT_DIG__ 24
-// WEBASSEMBLY32-NEXT:#define __FLT_MAX_10_EXP__ 38
-// WEBASSEMBLY32-NEXT:#define __FLT_MAX_EXP__ 128
-// WEBASSEMBLY32-NEXT:#define __FLT_MAX__ 3.40282347e+38F
-// WEBASSEMBLY32-NEXT:#define __FLT_MIN_10_EXP__ (-37)
-// WEBASSEMBLY32-NEXT:#define __FLT_MIN_EXP__ (-125)
-// WEBASSEMBLY32-NEXT:#define __FLT_MIN__ 1.17549435e-38F
-// WEBASSEMBLY32-NEXT:#define __FLT_RADIX__ 2
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_INT_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_LONG_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define 

r351298 - [WebAssembly] COWS has been renamed to WASI.

2019-01-15 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Jan 15 21:23:57 2019
New Revision: 351298

URL: http://llvm.org/viewvc/llvm-project?rev=351298=rev
Log:
[WebAssembly] COWS has been renamed to WASI.

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/Driver/wasm-toolchain.c
cfe/trunk/test/Driver/wasm-toolchain.cpp

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=351298=351297=351298=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Tue Jan 15 21:23:57 2019
@@ -571,7 +571,7 @@ TargetInfo *AllocateTarget(const llvm::T
 !Triple.isOSBinFormatWasm())
   return nullptr;
 if (Triple.getOS() != llvm::Triple::UnknownOS &&
-Triple.getOS() != llvm::Triple::COWS)
+Triple.getOS() != llvm::Triple::WASI)
   return nullptr;
 return new WebAssemblyOSTargetInfo(Triple, Opts);
   case llvm::Triple::wasm64:
@@ -580,7 +580,7 @@ TargetInfo *AllocateTarget(const llvm::T
 !Triple.isOSBinFormatWasm())
   return nullptr;
 if (Triple.getOS() != llvm::Triple::UnknownOS &&
-Triple.getOS() != llvm::Triple::COWS)
+Triple.getOS() != llvm::Triple::WASI)
   return nullptr;
 return new WebAssemblyOSTargetInfo(Triple, Opts);
 

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=351298=351297=351298=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Tue Jan 15 21:23:57 2019
@@ -24,17 +24,17 @@
 
 // A basic C link command-line with known OS.
 
-// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-cows-musl 
--sysroot=/foo -fuse-ld=wasm-ld %s 2>&1 | FileCheck -check-prefix=LINK_KNOWN %s
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-wasi-musl 
--sysroot=/foo -fuse-ld=wasm-ld %s 2>&1 | FileCheck -check-prefix=LINK_KNOWN %s
 // LINK_KNOWN: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
-// LINK_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-cows-musl" "crt1.o" 
"[[temp]]" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
+// LINK_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi-musl" "crt1.o" 
"[[temp]]" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
 
 // A basic C link command-line with optimization with known OS.
 
-// RUN: %clang -### -O2 -no-canonical-prefixes -target 
wasm32-unknown-cows-musl --sysroot=/foo -fuse-ld=wasm-ld %s 2>&1 | FileCheck 
-check-prefix=LINK_OPT_KNOWN %s
+// RUN: %clang -### -O2 -no-canonical-prefixes -target 
wasm32-unknown-wasi-musl --sysroot=/foo -fuse-ld=wasm-ld %s 2>&1 | FileCheck 
-check-prefix=LINK_OPT_KNOWN %s
 // LINK_OPT_KNOWN: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
-// LINK_OPT_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-cows-musl" "crt1.o" 
"[[temp]]" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
+// LINK_OPT_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi-musl" "crt1.o" 
"[[temp]]" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" "-o" "a.out"
 
 // A basic C compile command-line with known OS.
 
-// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-cows-musl 
--sysroot=/foo %s 2>&1 | FileCheck -check-prefix=COMPILE %s
-// COMPILE: clang{{.*}}" "-cc1" {{.*}} "-internal-isystem" 
"/foo/include/wasm32-cows-musl" "-internal-isystem" "/foo/include"
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-wasi-musl 
--sysroot=/foo %s 2>&1 | FileCheck -check-prefix=COMPILE %s
+// COMPILE: clang{{.*}}" "-cc1" {{.*}} "-internal-isystem" 
"/foo/include/wasm32-wasi-musl" "-internal-isystem" "/foo/include"

Modified: cfe/trunk/test/Driver/wasm-toolchain.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.cpp?rev=351298=351297=351298=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.cpp (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.cpp Tue Jan 15 21:23:57 2019
@@ -24,17 +24,17 @@
 
 // A basic C++ link command-line with known OS.
 
-// RUN: %clangxx -### -no-canonical-prefixes -target wasm32-unknown-cows-musl 
--sysroot=/foo -fuse-ld=wasm-ld --stdlib=c++ %s 2>&1 | FileCheck 
-check-prefix=LINK_KNOWN %s
+// RUN: %clangxx -### -no-canonical-prefixes -target wasm32-unknown-wasi-musl 
--sysroot=/foo -fuse-ld=wasm-ld --stdlib=c++ %s 2>&1 | FileCheck 
-check-prefix=LINK_KNOWN %s
 // LINK_KNOWN: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
-// LINK_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-cows-musl" "crt1.o" 
"[[temp]]" "-lc++" "-lc++abi" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" 
"-o" "a.out"
+// LINK_KNOWN: wasm-ld{{.*}}" "-L/foo/lib/wasm32-wasi-musl" "crt1.o" 
"[[temp]]" "-lc++" "-lc++abi" "-lc" "{{.*[/\\]}}libclang_rt.builtins-wasm32.a" 

r351164 - [WebAssembly] Support multilibs for wasm32 and add a wasm OS that uses it

2019-01-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Jan 14 22:58:16 2019
New Revision: 351164

URL: http://llvm.org/viewvc/llvm-project?rev=351164=rev
Log:
[WebAssembly] Support multilibs for wasm32 and add a wasm OS that uses it

This adds support for multilib paths for wasm32 targets, following
[Debian's Multiarch conventions], and also adds an experimental OS name in
order to test it. 

[Debian's Multiarch conventions]: https://wiki.debian.org/Multiarch/

Differential Revision: https://reviews.llvm.org/D56553

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp
cfe/trunk/test/Driver/wasm-toolchain.c
cfe/trunk/test/Driver/wasm-toolchain.cpp

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=351164=351163=351164=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Mon Jan 14 22:58:16 2019
@@ -572,17 +572,19 @@ TargetInfo *AllocateTarget(const llvm::T
   case llvm::Triple::wasm32:
 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
 Triple.getVendor() != llvm::Triple::UnknownVendor ||
-Triple.getOS() != llvm::Triple::UnknownOS ||
-Triple.getEnvironment() != llvm::Triple::UnknownEnvironment ||
-!(Triple.isOSBinFormatELF() || Triple.isOSBinFormatWasm()))
+!Triple.isOSBinFormatWasm())
+  return nullptr;
+if (Triple.getOS() != llvm::Triple::UnknownOS &&
+Triple.getOS() != llvm::Triple::COWS)
   return nullptr;
 return new WebAssemblyOSTargetInfo(Triple, Opts);
   case llvm::Triple::wasm64:
 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
 Triple.getVendor() != llvm::Triple::UnknownVendor ||
-Triple.getOS() != llvm::Triple::UnknownOS ||
-Triple.getEnvironment() != llvm::Triple::UnknownEnvironment ||
-!(Triple.isOSBinFormatELF() || Triple.isOSBinFormatWasm()))
+!Triple.isOSBinFormatWasm())
+  return nullptr;
+if (Triple.getOS() != llvm::Triple::UnknownOS &&
+Triple.getOS() != llvm::Triple::COWS)
   return nullptr;
 return new WebAssemblyOSTargetInfo(Triple, Opts);
 

Modified: cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp?rev=351164=351163=351164=diff
==
--- cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp Mon Jan 14 22:58:16 2019
@@ -24,6 +24,15 @@ using namespace llvm::opt;
 wasm::Linker::Linker(const ToolChain )
 : GnuTool("wasm::Linker", "lld", TC) {}
 
+/// Following the conventions in https://wiki.debian.org/Multiarch/Tuples,
+/// we remove the vendor field to form the multiarch triple.
+static std::string getMultiarchTriple(const Driver ,
+  const llvm::Triple ,
+  StringRef SysRoot) {
+return (TargetTriple.getArchName() + "-" +
+TargetTriple.getOSAndEnvironmentName()).str();
+}
+
 bool wasm::Linker::isLinkJob() const { return true; }
 
 bool wasm::Linker::hasIntegratedCPP() const { return false; }
@@ -75,7 +84,17 @@ WebAssembly::WebAssembly(const Driver 
 
   getProgramPaths().push_back(getDriver().getInstalledDir());
 
-  getFilePaths().push_back(getDriver().SysRoot + "/lib");
+  if (getTriple().getOS() == llvm::Triple::UnknownOS) {
+// Theoretically an "unknown" OS should mean no standard libraries, however
+// it could also mean that a custom set of libraries is in use, so just add
+// /lib to the search path. Disable multiarch in this case, to discourage
+// paths containing "unknown" from acquiring meanings.
+getFilePaths().push_back(getDriver().SysRoot + "/lib");
+  } else {
+const std::string MultiarchTriple =
+getMultiarchTriple(getDriver(), Triple, getDriver().SysRoot);
+getFilePaths().push_back(getDriver().SysRoot + "/lib/" + MultiarchTriple);
+  }
 }
 
 bool WebAssembly::IsMathErrnoDefault() const { return false; }
@@ -124,16 +143,29 @@ WebAssembly::GetCXXStdlibType(const ArgL
 
 void WebAssembly::AddClangSystemIncludeArgs(const ArgList ,
 ArgStringList ) const {
-  if (!DriverArgs.hasArg(options::OPT_nostdinc))
+  if (!DriverArgs.hasArg(options::OPT_nostdinc)) {
+if (getTriple().getOS() != llvm::Triple::UnknownOS) {
+  const std::string MultiarchTriple =
+  getMultiarchTriple(getDriver(), getTriple(), getDriver().SysRoot);
+  addSystemInclude(DriverArgs, CC1Args, getDriver().SysRoot + "/include/" 
+ MultiarchTriple);
+}
 addSystemInclude(DriverArgs, CC1Args, getDriver().SysRoot + "/include");
+  }
 }
 
 void WebAssembly::AddClangCXXStdlibIncludeArgs(const ArgList ,

r351089 - [WebAssembly] Remove old builtins

2019-01-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Jan 14 10:28:10 2019
New Revision: 351089

URL: http://llvm.org/viewvc/llvm-project?rev=351089=rev
Log:
[WebAssembly] Remove old builtins

This removes the old grow_memory and mem.grow-style builtins, leaving just
the memory.grow-style builtins.

Differential Revision: https://reviews.llvm.org/D56645

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/test/CodeGen/builtins-wasm.c

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=351089=351088=351089=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Mon Jan 14 10:28:10 
2019
@@ -26,14 +26,6 @@
 BUILTIN(__builtin_wasm_memory_size, "zIi", "n")
 BUILTIN(__builtin_wasm_memory_grow, "zIiz", "n")
 
-// These are the old names.
-BUILTIN(__builtin_wasm_mem_size, "zIi", "n")
-BUILTIN(__builtin_wasm_mem_grow, "zIiz", "n")
-
-// These are the old old names. They also lack the immediate field.
-BUILTIN(__builtin_wasm_current_memory, "z", "n")
-BUILTIN(__builtin_wasm_grow_memory, "zz", "n")
-
 // Floating point min/max
 BUILTIN(__builtin_wasm_min_f32, "fff", "nc")
 BUILTIN(__builtin_wasm_max_f32, "fff", "nc")

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=351089=351088=351089=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Mon Jan 14 10:28:10 2019
@@ -13087,31 +13087,6 @@ Value *CodeGenFunction::EmitWebAssemblyB
 Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_memory_grow, ResultType);
 return Builder.CreateCall(Callee, Args);
   }
-  case WebAssembly::BI__builtin_wasm_mem_size: {
-llvm::Type *ResultType = ConvertType(E->getType());
-Value *I = EmitScalarExpr(E->getArg(0));
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_mem_size, ResultType);
-return Builder.CreateCall(Callee, I);
-  }
-  case WebAssembly::BI__builtin_wasm_mem_grow: {
-llvm::Type *ResultType = ConvertType(E->getType());
-Value *Args[] = {
-  EmitScalarExpr(E->getArg(0)),
-  EmitScalarExpr(E->getArg(1))
-};
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_mem_grow, ResultType);
-return Builder.CreateCall(Callee, Args);
-  }
-  case WebAssembly::BI__builtin_wasm_current_memory: {
-llvm::Type *ResultType = ConvertType(E->getType());
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_current_memory, 
ResultType);
-return Builder.CreateCall(Callee);
-  }
-  case WebAssembly::BI__builtin_wasm_grow_memory: {
-Value *X = EmitScalarExpr(E->getArg(0));
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_grow_memory, 
X->getType());
-return Builder.CreateCall(Callee, X);
-  }
   case WebAssembly::BI__builtin_wasm_throw: {
 Value *Tag = EmitScalarExpr(E->getArg(0));
 Value *Obj = EmitScalarExpr(E->getArg(1));

Modified: cfe/trunk/test/CodeGen/builtins-wasm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-wasm.c?rev=351089=351088=351089=diff
==
--- cfe/trunk/test/CodeGen/builtins-wasm.c (original)
+++ cfe/trunk/test/CodeGen/builtins-wasm.c Mon Jan 14 10:28:10 2019
@@ -26,30 +26,6 @@ __SIZE_TYPE__ memory_grow(__SIZE_TYPE__
   // WEBASSEMBLY64: call i64 @llvm.wasm.memory.grow.i64(i32 0, i64 %{{.*}})
 }
 
-__SIZE_TYPE__ mem_size(void) {
-  return __builtin_wasm_mem_size(0);
-  // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.mem.size.i32(i32 0)
-  // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.mem.size.i64(i32 0)
-}
-
-__SIZE_TYPE__ mem_grow(__SIZE_TYPE__ delta) {
-  return __builtin_wasm_mem_grow(0, delta);
-  // WEBASSEMBLY32: call i32 @llvm.wasm.mem.grow.i32(i32 0, i32 %{{.*}})
-  // WEBASSEMBLY64: call i64 @llvm.wasm.mem.grow.i64(i32 0, i64 %{{.*}})
-}
-
-__SIZE_TYPE__ current_memory(void) {
-  return __builtin_wasm_current_memory();
-  // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.current.memory.i32()
-  // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.current.memory.i64()
-}
-
-__SIZE_TYPE__ grow_memory(__SIZE_TYPE__ delta) {
-  return __builtin_wasm_grow_memory(delta);
-  // WEBASSEMBLY32: call i32 @llvm.wasm.grow.memory.i32(i32 %{{.*}})
-  // WEBASSEMBLY64: call i64 @llvm.wasm.grow.memory.i64(i64 %{{.*}})
-}
-
 void throw(unsigned int tag, void *obj) {
   return __builtin_wasm_throw(tag, obj);
   // WEBASSEMBLY32: call void @llvm.wasm.throw(i32 %{{.*}}, i8* %{{.*}})


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r337783 - [WebAssembly] Change size_t to `unsigned long`.

2018-07-23 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Jul 23 17:29:58 2018
New Revision: 337783

URL: http://llvm.org/viewvc/llvm-project?rev=337783=rev
Log:
[WebAssembly] Change size_t to `unsigned long`.

Changing it to unsigned long (which is 32-bit on wasm32) makes it the same
type as wasm64 (where unsigned long is 64-bit), which would eliminate the most
common cause for mangled names being different between wasm32 and wasm64. For
example, export lists containing symbol names could now often be the same
between wasm32 and wasm64.

Differential Revision: https://reviews.llvm.org/D40526

Modified:
cfe/trunk/lib/Basic/Targets/WebAssembly.h
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/lib/Basic/Targets/WebAssembly.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/WebAssembly.h?rev=337783=337782=337783=diff
==
--- cfe/trunk/lib/Basic/Targets/WebAssembly.h (original)
+++ cfe/trunk/lib/Basic/Targets/WebAssembly.h Mon Jul 23 17:29:58 2018
@@ -47,9 +47,11 @@ public:
 LongDoubleWidth = LongDoubleAlign = 128;
 LongDoubleFormat = ::APFloat::IEEEquad();
 MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
-SizeType = UnsignedInt;
-PtrDiffType = SignedInt;
-IntPtrType = SignedInt;
+// size_t being unsigned long for both wasm32 and wasm64 makes mangled 
names
+// more consistent between the two.
+SizeType = UnsignedLong;
+PtrDiffType = SignedLong;
+IntPtrType = SignedLong;
   }
 
 protected:

Modified: cfe/trunk/test/Preprocessor/init.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=337783=337782=337783=diff
==
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Mon Jul 23 17:29:58 2018
@@ -9171,10 +9171,10 @@
 // WEBASSEMBLY32-NEXT:#define __INTMAX_MAX__ 9223372036854775807LL
 // WEBASSEMBLY32-NEXT:#define __INTMAX_TYPE__ long long int
 // WEBASSEMBLY32-NEXT:#define __INTMAX_WIDTH__ 64
-// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTd__ "d"
-// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTi__ "i"
-// WEBASSEMBLY32-NEXT:#define __INTPTR_MAX__ 2147483647
-// WEBASSEMBLY32-NEXT:#define __INTPTR_TYPE__ int
+// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTd__ "ld"
+// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTi__ "li"
+// WEBASSEMBLY32-NEXT:#define __INTPTR_MAX__ 2147483647L
+// WEBASSEMBLY32-NEXT:#define __INTPTR_TYPE__ long int
 // WEBASSEMBLY32-NEXT:#define __INTPTR_WIDTH__ 32
 // WEBASSEMBLY32-NEXT:#define __INT_FAST16_FMTd__ "hd"
 // WEBASSEMBLY32-NEXT:#define __INT_FAST16_FMTi__ "hi"
@@ -9239,10 +9239,10 @@
 // WEBASSEMBLY32-NEXT:#define __ORDER_PDP_ENDIAN__ 3412
 // WEBASSEMBLY32-NEXT:#define __POINTER_WIDTH__ 32
 // WEBASSEMBLY32-NEXT:#define __PRAGMA_REDEFINE_EXTNAME 1
-// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTd__ "d"
-// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTi__ "i"
-// WEBASSEMBLY32-NEXT:#define __PTRDIFF_MAX__ 2147483647
-// WEBASSEMBLY32-NEXT:#define __PTRDIFF_TYPE__ int
+// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTd__ "ld"
+// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTi__ "li"
+// WEBASSEMBLY32-NEXT:#define __PTRDIFF_MAX__ 2147483647L
+// WEBASSEMBLY32-NEXT:#define __PTRDIFF_TYPE__ long int
 // WEBASSEMBLY32-NEXT:#define __PTRDIFF_WIDTH__ 32
 // WEBASSEMBLY32-NOT:#define __REGISTER_PREFIX__
 // WEBASSEMBLY32-NEXT:#define __SCHAR_MAX__ 127
@@ -9262,12 +9262,12 @@
 // WEBASSEMBLY32-NEXT:#define __SIZEOF_SIZE_T__ 4
 // WEBASSEMBLY32-NEXT:#define __SIZEOF_WCHAR_T__ 4
 // WEBASSEMBLY32-NEXT:#define __SIZEOF_WINT_T__ 4
-// WEBASSEMBLY32-NEXT:#define __SIZE_FMTX__ "X"
-// WEBASSEMBLY32-NEXT:#define __SIZE_FMTo__ "o"
-// WEBASSEMBLY32-NEXT:#define __SIZE_FMTu__ "u"
-// WEBASSEMBLY32-NEXT:#define __SIZE_FMTx__ "x"
-// WEBASSEMBLY32-NEXT:#define __SIZE_MAX__ 4294967295U
-// WEBASSEMBLY32-NEXT:#define __SIZE_TYPE__ unsigned int
+// WEBASSEMBLY32-NEXT:#define __SIZE_FMTX__ "lX"
+// WEBASSEMBLY32-NEXT:#define __SIZE_FMTo__ "lo"
+// WEBASSEMBLY32-NEXT:#define __SIZE_FMTu__ "lu"
+// WEBASSEMBLY32-NEXT:#define __SIZE_FMTx__ "lx"
+// WEBASSEMBLY32-NEXT:#define __SIZE_MAX__ 4294967295UL
+// WEBASSEMBLY32-NEXT:#define __SIZE_TYPE__ long unsigned int
 // WEBASSEMBLY32-NEXT:#define __SIZE_WIDTH__ 32
 // WEBASSEMBLY32-NEXT:#define __STDC_HOSTED__ 0
 // WEBASSEMBLY32-NOT:#define __STDC_MB_MIGHT_NEQ_WC__
@@ -9315,12 +9315,12 @@
 // WEBASSEMBLY32-NEXT:#define __UINTMAX_MAX__ 18446744073709551615ULL
 // WEBASSEMBLY32-NEXT:#define __UINTMAX_TYPE__ long long unsigned int
 // WEBASSEMBLY32-NEXT:#define __UINTMAX_WIDTH__ 64
-// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTX__ "X"
-// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTo__ "o"
-// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTu__ "u"
-// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTx__ "x"
-// WEBASSEMBLY32-NEXT:#define __UINTPTR_MAX__ 4294967295U
-// WEBASSEMBLY32-NEXT:#define __UINTPTR_TYPE__ unsigned int
+// WEBASSEMBLY32-NEXT:#define 

r333712 - [WebAssembly] Update to the new names for the memory builtin functions.

2018-05-31 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu May 31 17:05:51 2018
New Revision: 333712

URL: http://llvm.org/viewvc/llvm-project?rev=333712=rev
Log:
[WebAssembly] Update to the new names for the memory builtin functions.

The WebAssembly committee has decided on the names `memory.size` and
`memory.grow` for the memory intrinsics, so update the clang builtin
functions to follow those names, keeping both sets of old names in place
for compatibility.

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/test/CodeGen/builtins-wasm.c

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=333712=333711=333712=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Thu May 31 17:05:51 
2018
@@ -17,15 +17,16 @@
 // The format of this database matches clang/Basic/Builtins.def.
 
 // Query the current memory size, and increase the current memory size.
-// Note that mem.size is not "c" (readnone) because it must be sequenced
-// with respect to grow_memory calls.
-// These are the new proposed names, which aren't yet official. Use at your own
-// risk.
+// Note that memory.size is not "c" (readnone) because it must be sequenced
+// with respect to memory.grow calls.
+BUILTIN(__builtin_wasm_memory_size, "zIi", "n")
+BUILTIN(__builtin_wasm_memory_grow, "zIiz", "n")
+
+// These are the old names.
 BUILTIN(__builtin_wasm_mem_size, "zIi", "n")
 BUILTIN(__builtin_wasm_mem_grow, "zIiz", "n")
 
-// These are the existing names, which are currently official, but expected
-// to be deprecated in the future. They also lack the immediate field.
+// These are the old old names. They also lack the immediate field.
 BUILTIN(__builtin_wasm_current_memory, "z", "n")
 BUILTIN(__builtin_wasm_grow_memory, "zz", "n")
 

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=333712=333711=333712=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Thu May 31 17:05:51 2018
@@ -11221,6 +11221,21 @@ Value *CodeGenFunction::EmitNVPTXBuiltin
 Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
const CallExpr *E) {
   switch (BuiltinID) {
+  case WebAssembly::BI__builtin_wasm_memory_size: {
+llvm::Type *ResultType = ConvertType(E->getType());
+Value *I = EmitScalarExpr(E->getArg(0));
+Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_memory_size, ResultType);
+return Builder.CreateCall(Callee, I);
+  }
+  case WebAssembly::BI__builtin_wasm_memory_grow: {
+llvm::Type *ResultType = ConvertType(E->getType());
+Value *Args[] = {
+  EmitScalarExpr(E->getArg(0)),
+  EmitScalarExpr(E->getArg(1))
+};
+Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_memory_grow, ResultType);
+return Builder.CreateCall(Callee, Args);
+  }
   case WebAssembly::BI__builtin_wasm_mem_size: {
 llvm::Type *ResultType = ConvertType(E->getType());
 Value *I = EmitScalarExpr(E->getArg(0));

Modified: cfe/trunk/test/CodeGen/builtins-wasm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-wasm.c?rev=333712=333711=333712=diff
==
--- cfe/trunk/test/CodeGen/builtins-wasm.c (original)
+++ cfe/trunk/test/CodeGen/builtins-wasm.c Thu May 31 17:05:51 2018
@@ -4,36 +4,48 @@
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY64
 
 __SIZE_TYPE__ f0(void) {
+  return __builtin_wasm_memory_size(0);
+// WEBASSEMBLY32: call {{i.*}} @llvm.wasm.memory.size.i32(i32 0)
+// WEBASSEMBLY64: call {{i.*}} @llvm.wasm.memory.size.i64(i32 0)
+}
+
+__SIZE_TYPE__ f1(__SIZE_TYPE__ delta) {
+  return __builtin_wasm_memory_grow(0, delta);
+// WEBASSEMBLY32: call i32 @llvm.wasm.memory.grow.i32(i32 0, i32 %{{.*}})
+// WEBASSEMBLY64: call i64 @llvm.wasm.memory.grow.i64(i32 0, i64 %{{.*}})
+}
+
+__SIZE_TYPE__ f2(void) {
   return __builtin_wasm_mem_size(0);
 // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.mem.size.i32(i32 0)
 // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.mem.size.i64(i32 0)
 }
 
-__SIZE_TYPE__ f1(__SIZE_TYPE__ delta) {
+__SIZE_TYPE__ f3(__SIZE_TYPE__ delta) {
   return __builtin_wasm_mem_grow(0, delta);
 // WEBASSEMBLY32: call i32 @llvm.wasm.mem.grow.i32(i32 0, i32 %{{.*}})
 // WEBASSEMBLY64: call i64 @llvm.wasm.mem.grow.i64(i32 0, i64 %{{.*}})
 }
 
-__SIZE_TYPE__ f2(void) {
+__SIZE_TYPE__ f4(void) {
   return __builtin_wasm_current_memory();
 // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.current.memory.i32()
 // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.current.memory.i64()
 }
 
-__SIZE_TYPE__ 

r323253 - [WebAssembly] Factor out settings common to wasm32 and wasm64. NFC.

2018-01-23 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Jan 23 12:22:12 2018
New Revision: 323253

URL: http://llvm.org/viewvc/llvm-project?rev=323253=rev
Log:
[WebAssembly] Factor out settings common to wasm32 and wasm64. NFC.

MaxAtomicPromoteWidth and MaxAtomicInlineWidth are 64 on both
wasm32 and wasm64, so they can be set in shared code.

Modified:
cfe/trunk/lib/Basic/Targets/WebAssembly.h

Modified: cfe/trunk/lib/Basic/Targets/WebAssembly.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/WebAssembly.h?rev=323253=323252=323253=diff
==
--- cfe/trunk/lib/Basic/Targets/WebAssembly.h (original)
+++ cfe/trunk/lib/Basic/Targets/WebAssembly.h Tue Jan 23 12:22:12 2018
@@ -45,6 +45,7 @@ public:
 SigAtomicType = SignedLong;
 LongDoubleWidth = LongDoubleAlign = 128;
 LongDoubleFormat = ::APFloat::IEEEquad();
+MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
 SizeType = UnsignedInt;
 PtrDiffType = SignedInt;
 IntPtrType = SignedInt;
@@ -118,7 +119,6 @@ public:
   explicit WebAssembly32TargetInfo(const llvm::Triple ,
const TargetOptions )
   : WebAssemblyTargetInfo(T, Opts) {
-MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
 resetDataLayout("e-m:e-p:32:32-i64:64-n32:64-S128");
   }
 
@@ -135,7 +135,6 @@ public:
   : WebAssemblyTargetInfo(T, Opts) {
 LongAlign = LongWidth = 64;
 PointerAlign = PointerWidth = 64;
-MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
 SizeType = UnsignedLong;
 PtrDiffType = SignedLong;
 IntPtrType = SignedLong;


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r323224 - [WebAssembly] Add mem.* builtin functions.

2018-01-23 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Jan 23 09:04:04 2018
New Revision: 323224

URL: http://llvm.org/viewvc/llvm-project?rev=323224=rev
Log:
[WebAssembly] Add mem.* builtin functions.

This corresponds to r323222 in LLVM. The new names are not yet
finalized, so use them at your own risk.

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/test/CodeGen/builtins-wasm.c
cfe/trunk/test/CodeGen/wasm-arguments.c

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=323224=323223=323224=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Tue Jan 23 09:04:04 
2018
@@ -16,8 +16,16 @@
 
 // The format of this database matches clang/Basic/Builtins.def.
 
-// Note that current_memory is not "c" (readnone) because it must be sequenced
+// Query the current memory size, and increase the current memory size.
+// Note that mem.size is not "c" (readnone) because it must be sequenced
 // with respect to grow_memory calls.
+// These are the new proposed names, which aren't yet official. Use at your own
+// risk.
+BUILTIN(__builtin_wasm_mem_size, "zIi", "n")
+BUILTIN(__builtin_wasm_mem_grow, "zIiz", "n")
+
+// These are the existing names, which are currently official, but expected
+// to be deprecated in the future. They also lack the immediate field.
 BUILTIN(__builtin_wasm_current_memory, "z", "n")
 BUILTIN(__builtin_wasm_grow_memory, "zz", "n")
 

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=323224=323223=323224=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Tue Jan 23 09:04:04 2018
@@ -10495,6 +10495,21 @@ Value *CodeGenFunction::EmitNVPTXBuiltin
 Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
const CallExpr *E) {
   switch (BuiltinID) {
+  case WebAssembly::BI__builtin_wasm_mem_size: {
+llvm::Type *ResultType = ConvertType(E->getType());
+Value *I = EmitScalarExpr(E->getArg(0));
+Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_mem_size, ResultType);
+return Builder.CreateCall(Callee, I);
+  }
+  case WebAssembly::BI__builtin_wasm_mem_grow: {
+llvm::Type *ResultType = ConvertType(E->getType());
+Value *Args[] = {
+  EmitScalarExpr(E->getArg(0)),
+  EmitScalarExpr(E->getArg(1))
+};
+Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_mem_grow, ResultType);
+return Builder.CreateCall(Callee, Args);
+  }
   case WebAssembly::BI__builtin_wasm_current_memory: {
 llvm::Type *ResultType = ConvertType(E->getType());
 Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_current_memory, 
ResultType);

Modified: cfe/trunk/test/CodeGen/builtins-wasm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-wasm.c?rev=323224=323223=323224=diff
==
--- cfe/trunk/test/CodeGen/builtins-wasm.c (original)
+++ cfe/trunk/test/CodeGen/builtins-wasm.c Tue Jan 23 09:04:04 2018
@@ -3,25 +3,37 @@
 // RUN: %clang_cc1 -triple wasm64-unknown-unknown -O3 -emit-llvm -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY64
 
-__SIZE_TYPE__ f1(void) {
+__SIZE_TYPE__ f0(void) {
+  return __builtin_wasm_mem_size(0);
+// WEBASSEMBLY32: call {{i.*}} @llvm.wasm.mem.size.i32(i32 0)
+// WEBASSEMBLY64: call {{i.*}} @llvm.wasm.mem.size.i64(i32 0)
+}
+
+__SIZE_TYPE__ f1(__SIZE_TYPE__ delta) {
+  return __builtin_wasm_mem_grow(0, delta);
+// WEBASSEMBLY32: call i32 @llvm.wasm.mem.grow.i32(i32 0, i32 %{{.*}})
+// WEBASSEMBLY64: call i64 @llvm.wasm.mem.grow.i64(i32 0, i64 %{{.*}})
+}
+
+__SIZE_TYPE__ f2(void) {
   return __builtin_wasm_current_memory();
 // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.current.memory.i32()
 // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.current.memory.i64()
 }
 
-__SIZE_TYPE__ f2(__SIZE_TYPE__ delta) {
+__SIZE_TYPE__ f3(__SIZE_TYPE__ delta) {
   return __builtin_wasm_grow_memory(delta);
 // WEBASSEMBLY32: call i32 @llvm.wasm.grow.memory.i32(i32 %{{.*}})
 // WEBASSEMBLY64: call i64 @llvm.wasm.grow.memory.i64(i64 %{{.*}})
 }
 
-void f3(unsigned int tag, void *obj) {
+void f4(unsigned int tag, void *obj) {
   return __builtin_wasm_throw(tag, obj);
 // WEBASSEMBLY32: call void @llvm.wasm.throw(i32 %{{.*}}, i8* %{{.*}})
 // WEBASSEMBLY64: call void @llvm.wasm.throw(i32 %{{.*}}, i8* %{{.*}})
 }
 
-void f4() {
+void f5(void) {
   return __builtin_wasm_rethrow();
 // WEBASSEMBLY32: call void @llvm.wasm.rethrow()
 // WEBASSEMBLY64: call void @llvm.wasm.rethrow()

Modified: 

r322967 - [WebAssembly] Add target flags for sign-ext opcodes.

2018-01-19 Thread Dan Gohman via cfe-commits
Author: djg
Date: Fri Jan 19 09:16:32 2018
New Revision: 322967

URL: http://llvm.org/viewvc/llvm-project?rev=322967=rev
Log:
[WebAssembly] Add target flags for sign-ext opcodes.

Add -msign-ext and -mno-sign-ext to control the new sign-ext target
feature.

Modified:
cfe/trunk/docs/ClangCommandLineReference.rst
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Basic/Targets/WebAssembly.cpp
cfe/trunk/lib/Basic/Targets/WebAssembly.h

Modified: cfe/trunk/docs/ClangCommandLineReference.rst
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ClangCommandLineReference.rst?rev=322967=322966=322967=diff
==
--- cfe/trunk/docs/ClangCommandLineReference.rst (original)
+++ cfe/trunk/docs/ClangCommandLineReference.rst Fri Jan 19 09:16:32 2018
@@ -2320,6 +2320,8 @@ WebAssembly
 ---
 .. option:: -mnontrapping-fptoint, -mno-nontrapping-fptoint
 
+.. option:: -msign-ext, -mno-sign-ext
+
 .. option:: -msimd128, -mno-simd128
 
 X86

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=322967=322966=322967=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Fri Jan 19 09:16:32 2018
@@ -1870,6 +1870,8 @@ def msimd128 : Flag<["-"], "msimd128">,
 def mno_simd128 : Flag<["-"], "mno-simd128">, Group;
 def mnontrapping_fptoint : Flag<["-"], "mnontrapping-fptoint">, 
Group;
 def mno_nontrapping_fptoint : Flag<["-"], "mno-nontrapping-fptoint">, 
Group;
+def msign_ext : Flag<["-"], "msign-ext">, Group;
+def mno_sign_ext : Flag<["-"], "mno-sign-ext">, Group;
 
 def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">,
   Flags<[HelpHidden]>,

Modified: cfe/trunk/lib/Basic/Targets/WebAssembly.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/WebAssembly.cpp?rev=322967=322966=322967=diff
==
--- cfe/trunk/lib/Basic/Targets/WebAssembly.cpp (original)
+++ cfe/trunk/lib/Basic/Targets/WebAssembly.cpp Fri Jan 19 09:16:32 2018
@@ -33,6 +33,7 @@ bool WebAssemblyTargetInfo::hasFeature(S
   return llvm::StringSwitch(Feature)
   .Case("simd128", SIMDLevel >= SIMD128)
   .Case("nontrapping-fptoint", HasNontrappingFPToInt)
+  .Case("sign-ext", HasSignExt)
   .Default(false);
 }
 
@@ -70,6 +71,14 @@ bool WebAssemblyTargetInfo::handleTarget
   HasNontrappingFPToInt = false;
   continue;
 }
+if (Feature == "+sign-ext") {
+  HasSignExt = true;
+  continue;
+}
+if (Feature == "-sign-ext") {
+  HasSignExt = false;
+  continue;
+}
 
 Diags.Report(diag::err_opt_not_valid_with_opt)
 << Feature << "-target-feature";

Modified: cfe/trunk/lib/Basic/Targets/WebAssembly.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/WebAssembly.h?rev=322967=322966=322967=diff
==
--- cfe/trunk/lib/Basic/Targets/WebAssembly.h (original)
+++ cfe/trunk/lib/Basic/Targets/WebAssembly.h Fri Jan 19 09:16:32 2018
@@ -31,10 +31,12 @@ class LLVM_LIBRARY_VISIBILITY WebAssembl
   } SIMDLevel;
 
   bool HasNontrappingFPToInt;
+  bool HasSignExt;
 
 public:
   explicit WebAssemblyTargetInfo(const llvm::Triple , const TargetOptions &)
-  : TargetInfo(T), SIMDLevel(NoSIMD), HasNontrappingFPToInt(false) {
+  : TargetInfo(T), SIMDLevel(NoSIMD), HasNontrappingFPToInt(false),
+HasSignExt(false) {
 NoAsmVariants = true;
 SuitableAlign = 128;
 LargeArrayMinWidth = 128;
@@ -60,6 +62,7 @@ private:
 if (CPU == "bleeding-edge") {
   Features["simd128"] = true;
   Features["nontrapping-fptoint"] = true;
+  Features["sign-ext"] = true;
 }
 return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
   }


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r319801 - [WebAssembly] Don't use Wasm function sections for more than one function

2017-12-05 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Dec  5 09:46:17 2017
New Revision: 319801

URL: http://llvm.org/viewvc/llvm-project?rev=319801=rev
Log:
[WebAssembly] Don't use Wasm function sections for more than one function

Patch by Nicholas Wilson!

Fixes PR35467.

Differential Revision: https://reviews.llvm.org/D40738

Modified:
cfe/trunk/lib/Basic/Targets/OSTargets.h
cfe/trunk/test/CodeGenCXX/static-init-wasm.cpp

Modified: cfe/trunk/lib/Basic/Targets/OSTargets.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.h?rev=319801=319800=319801=diff
==
--- cfe/trunk/lib/Basic/Targets/OSTargets.h (original)
+++ cfe/trunk/lib/Basic/Targets/OSTargets.h Tue Dec  5 09:46:17 2017
@@ -711,11 +711,6 @@ class LLVM_LIBRARY_VISIBILITY WebAssembl
   Builder.defineMacro("_GNU_SOURCE");
   }
 
-  // As an optimization, group static init code together in a section.
-  const char *getStaticInitSectionSpecifier() const final {
-return ".text.__startup";
-  }
-
 public:
   explicit WebAssemblyOSTargetInfo(const llvm::Triple ,
const TargetOptions )

Modified: cfe/trunk/test/CodeGenCXX/static-init-wasm.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/static-init-wasm.cpp?rev=319801=319800=319801=diff
==
--- cfe/trunk/test/CodeGenCXX/static-init-wasm.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/static-init-wasm.cpp Tue Dec  5 09:46:17 2017
@@ -43,12 +43,12 @@ struct A {
 
 A theA;
 
-// WEBASSEMBLY32: define internal void @__cxx_global_var_init() #3 section 
".text.__startup" {
+// WEBASSEMBLY32: define internal void @__cxx_global_var_init() #3 {
 // WEBASSEMBLY32: call %struct.A* @_ZN1AC1Ev(%struct.A* @theA)
-// WEBASSEMBLY32: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() 
#3 section ".text.__startup" {
+// WEBASSEMBLY32: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() 
#3 {
 // WEBASSEMBLY32: call void @__cxx_global_var_init()
 //
-// WEBASSEMBLY64: define internal void @__cxx_global_var_init() #3 section 
".text.__startup" {
+// WEBASSEMBLY64: define internal void @__cxx_global_var_init() #3 {
 // WEBASSEMBLY64: call %struct.A* @_ZN1AC1Ev(%struct.A* @theA)
-// WEBASSEMBLY64: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() 
#3 section ".text.__startup" {
+// WEBASSEMBLY64: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() 
#3 {
 // WEBASSEMBLY64: call void @__cxx_global_var_init()


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r319129 - [WebAssembly] Add options for using the nontrapping-fptoint feature.

2017-11-27 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Nov 27 17:13:45 2017
New Revision: 319129

URL: http://llvm.org/viewvc/llvm-project?rev=319129=rev
Log:
[WebAssembly] Add options for using the nontrapping-fptoint feature.

This adds ways to control use of WebAssembly's new nontrapping-fptoint
feature.

Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Basic/Targets/WebAssembly.cpp
cfe/trunk/lib/Basic/Targets/WebAssembly.h

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=319129=319128=319129=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Mon Nov 27 17:13:45 2017
@@ -1837,6 +1837,8 @@ def ffixed_x18 : Flag<["-"], "ffixed-x18
 
 def msimd128 : Flag<["-"], "msimd128">, Group;
 def mno_simd128 : Flag<["-"], "mno-simd128">, Group;
+def mnontrapping_fptoint : Flag<["-"], "mnontrapping-fptoint">, 
Group;
+def mno_nontrapping_fptoint : Flag<["-"], "mno-nontrapping-fptoint">, 
Group;
 
 def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">,
   Flags<[HelpHidden]>,

Modified: cfe/trunk/lib/Basic/Targets/WebAssembly.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/WebAssembly.cpp?rev=319129=319128=319129=diff
==
--- cfe/trunk/lib/Basic/Targets/WebAssembly.cpp (original)
+++ cfe/trunk/lib/Basic/Targets/WebAssembly.cpp Mon Nov 27 17:13:45 2017
@@ -32,6 +32,7 @@ const Builtin::Info WebAssemblyTargetInf
 bool WebAssemblyTargetInfo::hasFeature(StringRef Feature) const {
   return llvm::StringSwitch(Feature)
   .Case("simd128", SIMDLevel >= SIMD128)
+  .Case("nontrapping-fptoint", HasNontrappingFPToInt)
   .Default(false);
 }
 
@@ -61,6 +62,14 @@ bool WebAssemblyTargetInfo::handleTarget
   SIMDLevel = std::min(SIMDLevel, SIMDEnum(SIMD128 - 1));
   continue;
 }
+if (Feature == "+nontrapping-fptoint") {
+  HasNontrappingFPToInt = true;
+  continue;
+}
+if (Feature == "-nontrapping-fptoint") {
+  HasNontrappingFPToInt = false;
+  continue;
+}
 
 Diags.Report(diag::err_opt_not_valid_with_opt)
 << Feature << "-target-feature";

Modified: cfe/trunk/lib/Basic/Targets/WebAssembly.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/WebAssembly.h?rev=319129=319128=319129=diff
==
--- cfe/trunk/lib/Basic/Targets/WebAssembly.h (original)
+++ cfe/trunk/lib/Basic/Targets/WebAssembly.h Mon Nov 27 17:13:45 2017
@@ -30,9 +30,11 @@ class LLVM_LIBRARY_VISIBILITY WebAssembl
 SIMD128,
   } SIMDLevel;
 
+  bool HasNontrappingFPToInt;
+
 public:
   explicit WebAssemblyTargetInfo(const llvm::Triple , const TargetOptions &)
-  : TargetInfo(T), SIMDLevel(NoSIMD) {
+  : TargetInfo(T), SIMDLevel(NoSIMD), HasNontrappingFPToInt(false) {
 NoAsmVariants = true;
 SuitableAlign = 128;
 LargeArrayMinWidth = 128;
@@ -55,8 +57,10 @@ private:
   initFeatureMap(llvm::StringMap , DiagnosticsEngine ,
  StringRef CPU,
  const std::vector ) const override {
-if (CPU == "bleeding-edge")
+if (CPU == "bleeding-edge") {
   Features["simd128"] = true;
+  Features["nontrapping-fptoint"] = true;
+}
 return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
   }
 


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r319101 - [WebAssemby] Enable "-mthread-model single" by default, for now.

2017-11-27 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Nov 27 13:39:16 2017
New Revision: 319101

URL: http://llvm.org/viewvc/llvm-project?rev=319101=rev
Log:
[WebAssemby] Enable "-mthread-model single" by default, for now.

The WebAssembly standard does not yet have threads, and while it's in the
process of being standardized, it'll take some time for it to make it
through and be available in all popular implementations. With increasing
numbers of people using the LLVM wasm backend through LLVM directly rather
than through Emscripten, it's increasingly important to have friendly
defaults.

See also https://bugs.llvm.org/show_bug.cgi?id=35411

Modified:
cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp
cfe/trunk/lib/Driver/ToolChains/WebAssembly.h

Modified: cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp?rev=319101=319100=319101=diff
==
--- cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp Mon Nov 27 13:39:16 2017
@@ -135,6 +135,14 @@ void WebAssembly::AddClangCXXStdlibInclu
  getDriver().SysRoot + "/include/c++/v1");
 }
 
+std::string WebAssembly::getThreadModel() const {
+  // The WebAssembly MVP does not yet support threads; for now, use the
+  // "single" threading model, which lowers atomics to non-atomic operations.
+  // When threading support is standardized and implemented in popular engines,
+  // this override should be removed.
+  return "single";
+}
+
 Tool *WebAssembly::buildLinker() const {
   return new tools::wasm::Linker(*this);
 }

Modified: cfe/trunk/lib/Driver/ToolChains/WebAssembly.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/WebAssembly.h?rev=319101=319100=319101=diff
==
--- cfe/trunk/lib/Driver/ToolChains/WebAssembly.h (original)
+++ cfe/trunk/lib/Driver/ToolChains/WebAssembly.h Mon Nov 27 13:39:16 2017
@@ -62,6 +62,7 @@ private:
   void AddClangCXXStdlibIncludeArgs(
   const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const override;
+  std::string getThreadModel() const override;
 
   const char *getDefaultLinker() const override {
 return "lld";


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r304859 - [WebAssembly] Set MaxAtomicInlineWidth to 64.

2017-06-06 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Jun  6 21:22:40 2017
New Revision: 304859

URL: http://llvm.org/viewvc/llvm-project?rev=304859=rev
Log:
[WebAssembly] Set MaxAtomicInlineWidth to 64.

The WebAssembly threads proposal has changed such that C++
implementations can now declare that atomics up to 64 bits are
"lock free" in C++'s terms.

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=304859=304858=304859=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Tue Jun  6 21:22:40 2017
@@ -8476,7 +8476,7 @@ public:
   explicit WebAssembly32TargetInfo(const llvm::Triple ,
const TargetOptions )
   : WebAssemblyTargetInfo(T, Opts) {
-MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 32;
+MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
 resetDataLayout("e-m:e-p:32:32-i64:64-n32:64-S128");
   }
 

Modified: cfe/trunk/test/Preprocessor/init.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=304859=304858=304859=diff
==
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Tue Jun  6 21:22:40 2017
@@ -8851,7 +8851,7 @@
 // WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_CHAR32_T_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_CHAR_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_INT_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_LLONG_LOCK_FREE 1
+// WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_LLONG_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_LONG_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_POINTER_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __CLANG_ATOMIC_SHORT_LOCK_FREE 2
@@ -8895,7 +8895,7 @@
 // WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_INT_LOCK_FREE 2
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_LLONG_LOCK_FREE 1
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_LONG_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
 // WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_SHORT_LOCK_FREE 2


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r292324 - [WebAssembly] Update grow_memory's return type.

2017-01-17 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Jan 17 19:03:35 2017
New Revision: 292324

URL: http://llvm.org/viewvc/llvm-project?rev=292324=rev
Log:
[WebAssembly] Update grow_memory's return type.

The grow_memory instruction now returns the previous memory size. Add the
return type to the clang intrinsic.

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
cfe/trunk/test/CodeGen/builtins-wasm.c

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=292324=292323=292324=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Tue Jan 17 19:03:35 
2017
@@ -16,9 +16,9 @@
 
 // The format of this database matches clang/Basic/Builtins.def.
 
-// Note that current_memory is not "c" (readnone) because it must be sequenced 
with
-// respect to grow_memory calls.
+// Note that current_memory is not "c" (readnone) because it must be sequenced
+// with respect to grow_memory calls.
 BUILTIN(__builtin_wasm_current_memory, "z", "n")
-BUILTIN(__builtin_wasm_grow_memory, "vz", "n")
+BUILTIN(__builtin_wasm_grow_memory, "zz", "n")
 
 #undef BUILTIN

Modified: cfe/trunk/test/CodeGen/builtins-wasm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-wasm.c?rev=292324=292323=292324=diff
==
--- cfe/trunk/test/CodeGen/builtins-wasm.c (original)
+++ cfe/trunk/test/CodeGen/builtins-wasm.c Tue Jan 17 19:03:35 2017
@@ -9,8 +9,8 @@ __SIZE_TYPE__ f1(void) {
 // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.current.memory.i64()
 }
 
-void f2(long delta) {
-  __builtin_wasm_grow_memory(delta);
-// WEBASSEMBLY32: call void @llvm.wasm.grow.memory.i32(i32 %{{.*}})
-// WEBASSEMBLY64: call void @llvm.wasm.grow.memory.i64(i64 %{{.*}})
+__SIZE_TYPE__ f2(__SIZE_TYPE__ delta) {
+  return __builtin_wasm_grow_memory(delta);
+// WEBASSEMBLY32: call i32 @llvm.wasm.grow.memory.i32(i32 %{{.*}})
+// WEBASSEMBLY64: call i64 @llvm.wasm.grow.memory.i64(i64 %{{.*}})
 }


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r292269 - [WebAssembly] Add minimal support for the new wasm object format triple.

2017-01-17 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Jan 17 15:46:38 2017
New Revision: 292269

URL: http://llvm.org/viewvc/llvm-project?rev=292269=rev
Log:
[WebAssembly] Add minimal support for the new wasm object format triple.

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/lib/CodeGen/BackendUtil.cpp
cfe/trunk/lib/CodeGen/CodeGenModule.cpp
cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=292269=292268=292269=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Tue Jan 17 15:46:38 2017
@@ -8976,11 +8976,19 @@ static TargetInfo *AllocateTarget(const
 return new SPIR64TargetInfo(Triple, Opts);
   }
   case llvm::Triple::wasm32:
-if (!(Triple == llvm::Triple("wasm32-unknown-unknown")))
+if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
+Triple.getVendor() != llvm::Triple::UnknownVendor ||
+Triple.getOS() != llvm::Triple::UnknownOS ||
+Triple.getEnvironment() != llvm::Triple::UnknownEnvironment ||
+!(Triple.isOSBinFormatELF() || Triple.isOSBinFormatWasm()))
   return nullptr;
 return new WebAssemblyOSTargetInfo(Triple, Opts);
   case llvm::Triple::wasm64:
-if (!(Triple == llvm::Triple("wasm64-unknown-unknown")))
+if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
+Triple.getVendor() != llvm::Triple::UnknownVendor ||
+Triple.getOS() != llvm::Triple::UnknownOS ||
+Triple.getEnvironment() != llvm::Triple::UnknownEnvironment ||
+!(Triple.isOSBinFormatELF() || Triple.isOSBinFormatWasm()))
   return nullptr;
 return new WebAssemblyOSTargetInfo(Triple, Opts);
 

Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=292269=292268=292269=diff
==
--- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)
+++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Tue Jan 17 15:46:38 2017
@@ -999,6 +999,7 @@ static const char* getSectionNameForBitc
 return "__LLVM,__bitcode";
   case Triple::COFF:
   case Triple::ELF:
+  case Triple::Wasm:
   case Triple::UnknownObjectFormat:
 return ".llvmbc";
   }
@@ -1011,6 +1012,7 @@ static const char* getSectionNameForComm
 return "__LLVM,__cmdline";
   case Triple::COFF:
   case Triple::ELF:
+  case Triple::Wasm:
   case Triple::UnknownObjectFormat:
 return ".llvmcmd";
   }

Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=292269=292268=292269=diff
==
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Tue Jan 17 15:46:38 2017
@@ -3341,6 +3341,7 @@ CodeGenModule::GetAddrOfConstantCFString
 llvm_unreachable("unknown file format");
   case llvm::Triple::COFF:
   case llvm::Triple::ELF:
+  case llvm::Triple::Wasm:
 GV->setSection("cfstring");
 break;
   case llvm::Triple::MachO:

Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=292269=292268=292269=diff
==
--- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)
+++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Tue Jan 17 15:46:38 2017
@@ -2015,10 +2015,11 @@ void ItaniumCXXABI::EmitGuardedInit(Code
 
 // The ABI says: "It is suggested that it be emitted in the same COMDAT
 // group as the associated data object." In practice, this doesn't work for
-// non-ELF object formats, so only do it for ELF.
+// non-ELF and non-Wasm object formats, so only do it for ELF and Wasm.
 llvm::Comdat *C = var->getComdat();
 if (!D.isLocalVarDecl() && C &&
-CGM.getTarget().getTriple().isOSBinFormatELF()) {
+(CGM.getTarget().getTriple().isOSBinFormatELF() ||
+ CGM.getTarget().getTriple().isOSBinFormatWasm())) {
   guard->setComdat(C);
   // An inline variable's guard function is run from the per-TU
   // initialization function, not via a dedicated global ctor function, so
@@ -3534,8 +3535,9 @@ static StructorCodegen getCodegenToUse(C
 return StructorCodegen::RAUW;
 
   if (llvm::GlobalValue::isWeakForLinker(Linkage)) {
-// Only ELF supports COMDATs with arbitrary names (C5/D5).
-if (CGM.getTarget().getTriple().isOSBinFormatELF())
+// Only ELF and wasm support COMDATs with arbitrary names (C5/D5).
+if (CGM.getTarget().getTriple().isOSBinFormatELF() ||
+CGM.getTarget().getTriple().isOSBinFormatWasm())
   return StructorCodegen::COMDAT;
 return StructorCodegen::Emit;
   }


___

r288604 - [WebAssembly] Revert r288447.

2016-12-03 Thread Dan Gohman via cfe-commits
Author: djg
Date: Sat Dec  3 17:03:52 2016
New Revision: 288604

URL: http://llvm.org/viewvc/llvm-project?rev=288604=rev
Log:
[WebAssembly] Revert r288447.

Revert r288447 which introduced -mdirect. It turns out we don't need a
custom flag for this, as the information we need is in the target triple.

Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Basic/Targets.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=288604=288603=288604=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Sat Dec  3 17:03:52 2016
@@ -1613,8 +1613,6 @@ def ffixed_x18 : Flag<["-"], "ffixed-x18
 
 def msimd128 : Flag<["-"], "msimd128">, Group;
 def mno_simd128 : Flag<["-"], "mno-simd128">, Group;
-def mdirect : Flag<["-"], "mdirect">, Group;
-def mno_direct : Flag<["-"], "mno-direct">, Group;
 
 def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">,
   Flags<[HelpHidden]>,

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=288604=288603=288604=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Sat Dec  3 17:03:52 2016
@@ -8019,10 +8019,6 @@ private:
 SIMDLevel = std::min(SIMDLevel, SIMDEnum(SIMD128 - 1));
 continue;
   }
-  if (Feature == "+direct")
-continue;
-  if (Feature == "-direct")
-continue;
 
   Diags.Report(diag::err_opt_not_valid_with_opt) << Feature
  << "-target-feature";


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r288447 - [WebAssembly] Add an -mdirect flag for the direct wasm object feature.

2016-12-01 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Dec  1 19:12:40 2016
New Revision: 288447

URL: http://llvm.org/viewvc/llvm-project?rev=288447=rev
Log:
[WebAssembly] Add an -mdirect flag for the direct wasm object feature.

Add a target flag for enabling the new direct wasm object emission
feature.

Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Basic/Targets.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=288447=288446=288447=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Thu Dec  1 19:12:40 2016
@@ -1613,6 +1613,8 @@ def ffixed_x18 : Flag<["-"], "ffixed-x18
 
 def msimd128 : Flag<["-"], "msimd128">, Group;
 def mno_simd128 : Flag<["-"], "mno-simd128">, Group;
+def mdirect : Flag<["-"], "mdirect">, Group;
+def mno_direct : Flag<["-"], "mno-direct">, Group;
 
 def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">,
   Flags<[HelpHidden]>,

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=288447=288446=288447=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Thu Dec  1 19:12:40 2016
@@ -8019,6 +8019,10 @@ private:
 SIMDLevel = std::min(SIMDLevel, SIMDEnum(SIMD128 - 1));
 continue;
   }
+  if (Feature == "+direct")
+continue;
+  if (Feature == "-direct")
+continue;
 
   Diags.Report(diag::err_opt_not_valid_with_opt) << Feature
  << "-target-feature";


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D26431: [WebAssembly] Define __unix__ as part of the wasm target

2016-11-08 Thread Dan Gohman via cfe-commits
sunfish added a comment.

The other main way we could provide __unix et al would be to add them to 
tools/shared.py in Emscripten (see the comment "wasm target does not 
automatically define emscripten stuff"). It's not clear to me whether that's 
better than adding the macros to clang itself or not.

Currently Unixy-like functionality is provided by Emscripten facilities, and 
one could think of (hypothetical future) non-Emscripten clang as targeting more 
of the bare metal of WebAssembly which isn't inherently Unixy. Thoughts?

However, I'm also open to just adding it to clang for now and re-evaluating 
later, which we can do since we don't yet have a stable ABI.


https://reviews.llvm.org/D26431



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D26431: [WebAssembly] Define __unix__ as part of the wasm target

2016-11-08 Thread Dan Gohman via cfe-commits
sunfish added a comment.

When adding new predefined macros, please also add the new macros to 
test/Preprocessor/init.c (and remove negative tests that no longer apply).

Also though, I'd also like to understand this a little more. Even with 
emulation, there will be limits to how Unixy a Web environment could be (though 
a non-Web environment could potentially do more). Which tests start passing 
with this?


https://reviews.llvm.org/D26431



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D24134: [WebAssembly] Change wasm SizeType to match asmjs

2016-09-01 Thread Dan Gohman via cfe-commits
sunfish added a comment.

LGTM as a temporary workaround.


https://reviews.llvm.org/D24134



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D23244: [Driver] Enable CFI for WebAssembly

2016-08-08 Thread Dan Gohman via cfe-commits
sunfish accepted this revision.
sunfish added a comment.
This revision is now accepted and ready to land.

lgtm.


https://reviews.llvm.org/D23244



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r261560 - [WebAssembly] Initial driver support for standard library paths.

2016-02-22 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Feb 22 13:26:15 2016
New Revision: 261560

URL: http://llvm.org/viewvc/llvm-project?rev=261560=rev
Log:
[WebAssembly] Initial driver support for standard library paths.

Modified:
cfe/trunk/lib/Driver/ToolChains.cpp
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/Driver/wasm-toolchain.c

Modified: cfe/trunk/lib/Driver/ToolChains.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=261560=261559=261560=diff
==
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains.cpp Mon Feb 22 13:26:15 2016
@@ -4468,6 +4468,11 @@ Tool *MyriadToolChain::buildLinker() con
 WebAssembly::WebAssembly(const Driver , const llvm::Triple ,
  const llvm::opt::ArgList )
   : ToolChain(D, Triple, Args) {
+
+  assert(Triple.isArch32Bit() != Triple.isArch64Bit());
+  getFilePaths().push_back(
+  getDriver().SysRoot + "/lib" + (Triple.isArch32Bit() ? "32" : "64"));
+
   // Use LLD by default.
   DefaultLinker = "lld";
 }

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=261560=261559=261560=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Mon Feb 22 13:26:15 2016
@@ -6613,7 +6613,10 @@ void wasm::Linker::ConstructJob(Compilat
 const InputInfoList ,
 const ArgList ,
 const char *LinkingOutput) const {
-  const char *Linker = Args.MakeArgString(getToolChain().GetLinkerPath());
+
+  const ToolChain  = getToolChain();
+  const Driver  = ToolChain.getDriver();
+  const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath());
   ArgStringList CmdArgs;
   CmdArgs.push_back("-flavor");
   CmdArgs.push_back("ld");
@@ -6625,9 +6628,48 @@ void wasm::Linker::ConstructJob(Compilat
   if (areOptimizationsEnabled(Args))
 CmdArgs.push_back("--gc-sections");
 
-  AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);
+  if (Args.hasArg(options::OPT_rdynamic))
+CmdArgs.push_back("-export-dynamic");
+  if (Args.hasArg(options::OPT_s))
+CmdArgs.push_back("--strip-all");
+  if (Args.hasArg(options::OPT_shared))
+CmdArgs.push_back("-shared");
+  if (Args.hasArg(options::OPT_static))
+CmdArgs.push_back("-Bstatic");
+
+  Args.AddAllArgs(CmdArgs, options::OPT_L);
+  ToolChain.AddFilePathLibArgs(Args, CmdArgs);
+
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+if (Args.hasArg(options::OPT_shared))
+  CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("rcrt1.o")));
+else if (Args.hasArg(options::OPT_pie))
+  CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("Scrt1.o")));
+else
+  CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt1.o")));
+
+CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o")));
+  }
+
+  AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs);
+
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
+if (D.CCCIsCXX())
+  ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs);
+
+if (Args.hasArg(options::OPT_pthread))
+  CmdArgs.push_back("-lpthread");
+
+CmdArgs.push_back("-lc");
+CmdArgs.push_back("-lcompiler_rt");
+  }
+
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles))
+CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")));
+
   CmdArgs.push_back("-o");
   CmdArgs.push_back(Output.getFilename());
+
   C.addCommand(llvm::make_unique(JA, *this, Linker, CmdArgs, Inputs));
 }
 

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=261560=261559=261560=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Mon Feb 22 13:26:15 2016
@@ -25,20 +25,20 @@
 
 // A basic C link command-line.
 
-// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown %s 
2>&1 | FileCheck -check-prefix=LINK %s
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown 
--sysroot=/foo %s 2>&1 | FileCheck -check-prefix=LINK %s
 // LINK: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
-// LINK: lld{{.*}}" "-flavor" "ld" "[[temp]]" "-o" "a.out"
+// LINK: lld{{.*}}" "-flavor" "ld" "-L/foo/lib32" "crt1.o" "crti.o" "[[temp]]" 
"-lc" "-lcompiler_rt" "crtn.o" "-o" "a.out"
 
 // A basic C link command-line with optimization. WebAssembly is somewhat
 // special in enabling --gc-sections by default.
 
-// RUN: %clang -### -O2 -no-canonical-prefixes -target wasm32-unknown-unknown 
%s 2>&1 | FileCheck -check-prefix=LINK_OPT %s
+// RUN: %clang -### -O2 -no-canonical-prefixes -target 

r261557 - [WebAssembly] Lower va_arg in clang.

2016-02-22 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Feb 22 13:17:40 2016
New Revision: 261557

URL: http://llvm.org/viewvc/llvm-project?rev=261557=rev
Log:
[WebAssembly] Lower va_arg in clang.

This uses the general emitVoidPtrVAArg lowering logic for everything, since
this supports all types, and we don't have any special requirements.

Added:
cfe/trunk/test/CodeGen/wasm-varargs.c
Modified:
cfe/trunk/lib/CodeGen/TargetInfo.cpp

Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=261557=261556=261557=diff
==
--- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Mon Feb 22 13:17:40 2016
@@ -616,6 +616,9 @@ private:
 for (auto  : FI.arguments())
   Arg.info = classifyArgumentType(Arg.type);
   }
+
+  Address EmitVAArg(CodeGenFunction , Address VAListAddr,
+QualType Ty) const override;
 };
 
 class WebAssemblyTargetCodeGenInfo final : public TargetCodeGenInfo {
@@ -667,6 +670,14 @@ ABIArgInfo WebAssemblyABIInfo::classifyR
   return DefaultABIInfo::classifyReturnType(RetTy);
 }
 
+Address WebAssemblyABIInfo::EmitVAArg(CodeGenFunction , Address VAListAddr,
+  QualType Ty) const {
+  return emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*Indirect=*/ false,
+  getContext().getTypeInfoInChars(Ty),
+  CharUnits::fromQuantity(4),
+  /*AllowHigherAlign=*/ true);
+}
+
 
//===--===//
 // le32/PNaCl bitcode ABI Implementation
 //

Added: cfe/trunk/test/CodeGen/wasm-varargs.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/wasm-varargs.c?rev=261557=auto
==
--- cfe/trunk/test/CodeGen/wasm-varargs.c (added)
+++ cfe/trunk/test/CodeGen/wasm-varargs.c Mon Feb 22 13:17:40 2016
@@ -0,0 +1,103 @@
+// RUN: %clang_cc1 -triple wasm32-unknown-unknown -o - -emit-llvm %s | 
FileCheck %s
+
+#include 
+
+int test_i32(char *fmt, ...) {
+  va_list va;
+
+  va_start(va, fmt);
+  int v = va_arg(va, int);
+  va_end(va);
+
+  return v;
+}
+
+// CHECK-LABEL: define i32 @test_i32(i8*{{.*}} %fmt, ...) {{.*}} {
+// CHECK:   [[FMT_ADDR:%[^,=]+]] = alloca i8*, align 4
+// CHECK:   [[VA:%[^,=]+]] = alloca i8*, align 4
+// CHECK:   [[V:%[^,=]+]] = alloca i32, align 4
+// CHECK:   store i8* %fmt, i8** [[FMT_ADDR]], align 4
+// CHECK:   [[VA1:%[^,=]+]] = bitcast i8** [[VA]] to i8*
+// CHECK:   call void @llvm.va_start(i8* [[VA1]])
+// CHECK:   [[ARGP_CUR:%[^,=]+]] = load i8*, i8** [[VA]], align 4
+// CHECK:   [[ARGP_NEXT:%[^,=]+]] = getelementptr inbounds i8, i8* 
[[ARGP_CUR]], i32 4
+// CHECK:   store i8* [[ARGP_NEXT]], i8** [[VA]], align 4
+// CHECK:   [[R3:%[^,=]+]] = bitcast i8* [[ARGP_CUR]] to i32*
+// CHECK:   [[R4:%[^,=]+]] = load i32, i32* [[R3]], align 4
+// CHECK:   store i32 [[R4]], i32* [[V]], align 4
+// CHECK:   [[VA2:%[^,=]+]] = bitcast i8** [[VA]] to i8*
+// CHECK:   call void @llvm.va_end(i8* [[VA2]])
+// CHECK:   [[R5:%[^,=]+]] = load i32, i32* [[V]], align 4
+// CHECK:   ret i32 [[R5]]
+// CHECK: }
+
+long long test_i64(char *fmt, ...) {
+  va_list va;
+
+  va_start(va, fmt);
+  long long v = va_arg(va, long long);
+  va_end(va);
+
+  return v;
+}
+
+// CHECK-LABEL: define i64 @test_i64(i8*{{.*}} %fmt, ...) {{.*}} {
+// CHECK:   [[FMT_ADDR:%[^,=]+]] = alloca i8*, align 4
+// CHECK:   [[VA:%[^,=]+]] = alloca i8*, align 4
+// CHECK:   [[V:%[^,=]+]] = alloca i64, align 8
+// CHECK:   store i8* %fmt, i8** [[FMT_ADDR]], align 4
+// CHECK:   [[VA1:%[^,=]+]] = bitcast i8** [[VA]] to i8*
+// CHECK:   call void @llvm.va_start(i8* [[VA1]])
+// CHECK:   [[ARGP_CUR:%[^,=]+]] = load i8*, i8** [[VA]], align 4
+// CHECK:   [[R0:%[^,=]+]] = ptrtoint i8* [[ARGP_CUR]] to i32
+// CHECK:   [[R1:%[^,=]+]] = add i32 [[R0]], 7
+// CHECK:   [[R2:%[^,=]+]] = and i32 [[R1]], -8
+// CHECK:   [[ARGP_CUR_ALIGNED:%[^,=]+]] = inttoptr i32 [[R2]] to i8*
+// CHECK:   [[ARGP_NEXT:%[^,=]+]] = getelementptr inbounds i8, i8* 
[[ARGP_CUR_ALIGNED]], i32 8
+// CHECK:   store i8* [[ARGP_NEXT]], i8** [[VA]], align 4
+// CHECK:   [[R3:%[^,=]+]] = bitcast i8* [[ARGP_CUR_ALIGNED]] to i64*
+// CHECK:   [[R4:%[^,=]+]] = load i64, i64* [[R3]], align 8
+// CHECK:   store i64 [[R4]], i64* [[V]], align 8
+// CHECK:   [[VA2:%[^,=]+]] = bitcast i8** [[VA]] to i8*
+// CHECK:   call void @llvm.va_end(i8* [[VA2]])
+// CHECK:   [[R5:%[^,=]+]] = load i64, i64* [[V]], align 8
+// CHECK:   ret i64 [[R5]]
+// CHECK: }
+
+struct S {
+int x;
+int y;
+int z;
+};
+
+struct S test_struct(char *fmt, ...) {
+  va_list va;
+
+  va_start(va, fmt);
+  struct S v = va_arg(va, struct S);
+  va_end(va);
+
+  return v;
+}
+
+// CHECK: define void @test_struct([[STRUCT_S:%[^,=]+]]*{{.*}} noalias sret 
%agg.result, i8*{{.*}} %fmt, ...) {{.*}} {

Re: [PATCH] D16154: Default vaarg lowering should support indirect struct types.

2016-02-17 Thread Dan Gohman via cfe-commits
sunfish added a subscriber: sunfish.
sunfish added a comment.

For WebAssembly, I'm expecting we'll switch to emitVoidPtrVAArg and eschew 
LLVM's vaarg instruction too, as other targets do. This exposes the expanded 
code to the full optimizer, which seems preferable.


http://reviews.llvm.org/D16154



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r257774 - [WebAssembly] Configure some simple include paths and runtime library settings.

2016-01-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Jan 14 10:00:13 2016
New Revision: 257774

URL: http://llvm.org/viewvc/llvm-project?rev=257774=rev
Log:
[WebAssembly] Configure some simple include paths and runtime library settings.

Modified:
cfe/trunk/lib/Driver/ToolChains.cpp
cfe/trunk/lib/Driver/ToolChains.h

Modified: cfe/trunk/lib/Driver/ToolChains.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=257774=257773=257774=diff
==
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains.cpp Thu Jan 14 10:00:13 2016
@@ -4449,6 +4449,29 @@ void WebAssembly::addClangTargetOptions(
 CC1Args.push_back("-fuse-init-array");
 }
 
+ToolChain::RuntimeLibType WebAssembly::GetDefaultRuntimeLibType() const {
+  return ToolChain::RLT_CompilerRT;
+}
+
+ToolChain::CXXStdlibType WebAssembly::GetCXXStdlibType(const ArgList ) 
const {
+  return ToolChain::CST_Libcxx;
+}
+
+void WebAssembly::AddClangSystemIncludeArgs(const ArgList ,
+ArgStringList ) const {
+  if (!DriverArgs.hasArg(options::OPT_nostdinc))
+addSystemInclude(DriverArgs, CC1Args, getDriver().SysRoot + "/include");
+}
+
+void WebAssembly::AddClangCXXStdlibIncludeArgs(
+  const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const {
+  if (!DriverArgs.hasArg(options::OPT_nostdlibinc) &&
+  !DriverArgs.hasArg(options::OPT_nostdincxx))
+addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/include/c++/v1");
+}
+
 Tool *WebAssembly::buildLinker() const {
   return new tools::wasm::Linker(*this);
 }

Modified: cfe/trunk/lib/Driver/ToolChains.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=257774=257773=257774=diff
==
--- cfe/trunk/lib/Driver/ToolChains.h (original)
+++ cfe/trunk/lib/Driver/ToolChains.h Thu Jan 14 10:00:13 2016
@@ -1107,6 +1107,14 @@ private:
   bool HasNativeLLVMSupport() const override;
   void addClangTargetOptions(const llvm::opt::ArgList ,
  llvm::opt::ArgStringList ) const override;
+  RuntimeLibType GetDefaultRuntimeLibType() const override;
+  CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList ) const 
override;
+  void AddClangSystemIncludeArgs(
+  const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const override;
+  void AddClangCXXStdlibIncludeArgs(
+  const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const override;
 
   Tool *buildLinker() const override;
 };


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r257327 - [WebAssembly] Fix a typo in a comment.

2016-01-11 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Jan 11 05:49:44 2016
New Revision: 257327

URL: http://llvm.org/viewvc/llvm-project?rev=257327=rev
Log:
[WebAssembly] Fix a typo in a comment.

Modified:
cfe/trunk/test/Driver/wasm-toolchain.c

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=257327=257326=257327=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Mon Jan 11 05:49:44 2016
@@ -18,7 +18,7 @@
 // NO_DATA_SECTIONS-NOT: data-sections
 
 // Ditto, but ensure that a user -fvisibility=default disables the default
-// -fvisibilt=hidden.
+// -fvisibility=hidden.
 
 // RUN: %clang %s -### -target wasm32-unknown-unknown -fvisibility=default 
2>&1 | FileCheck -check-prefix=FVISIBILITY_DEFAULT %s
 // FVISIBILITY_DEFAULT-NOT: hidden


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r256967 - [WebAssembly] Add --gc-sections to the link line.

2016-01-06 Thread Dan Gohman via cfe-commits
On Wed, Jan 6, 2016 at 3:53 PM, Joerg Sonnenberger via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> On Wed, Jan 06, 2016 at 07:43:32PM -0000, Dan Gohman via cfe-commits wrote:
> > Author: djg
> > Date: Wed Jan  6 13:43:32 2016
> > New Revision: 256967
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=256967=rev
> > Log:
> > [WebAssembly] Add --gc-sections to the link line.
>
> Can you make sure it is added before any user options, so that in the
> worst case it can still be overriden?


I've now added a test for this in r257004.

Dan
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r257005 - [WebAssembly] Enable -ffunction-sections and -fdata-sections by default.

2016-01-06 Thread Dan Gohman via cfe-commits
Author: djg
Date: Wed Jan  6 18:50:27 2016
New Revision: 257005

URL: http://llvm.org/viewvc/llvm-project?rev=257005=rev
Log:
[WebAssembly] Enable -ffunction-sections and -fdata-sections by default.

These remain user-overridable with -fno-function-sections and
-fno-data-sections.

Modified:
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/Driver/wasm-toolchain.c

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=257005=257004=257005=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Jan  6 18:50:27 2016
@@ -4176,8 +4176,11 @@ void Clang::ConstructJob(Compilation ,
 CmdArgs.push_back("-generate-type-units");
   }
 
-  // CloudABI uses -ffunction-sections and -fdata-sections by default.
-  bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI;
+  // CloudABI and WebAssembly use -ffunction-sections and -fdata-sections by
+  // default.
+  bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI ||
+ Triple.getArch() == llvm::Triple::wasm32 ||
+ Triple.getArch() == llvm::Triple::wasm64;
 
   if (Args.hasFlag(options::OPT_ffunction_sections,
options::OPT_fno_function_sections, UseSeparateSections)) {
@@ -6536,7 +6539,9 @@ void wasm::Linker::ConstructJob(Compilat
   CmdArgs.push_back("ld");
 
   // Enable garbage collection of unused input sections by default, since code
-  // size is of particular importance.
+  // size is of particular importance. This is significantly facilitated by
+  // the enabling of -ffunction-sections and -fdata-sections in
+  // Clang::ConstructJob.
   if (areOptimizationsEnabled(Args))
 CmdArgs.push_back("--gc-sections");
 

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=257005=257004=257005=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Wed Jan  6 18:50:27 2016
@@ -1,7 +1,19 @@
 // A basic clang -cc1 command-line.
 
 // RUN: %clang %s -### -target wasm32-unknown-unknown 2>&1 | FileCheck 
-check-prefix=CC1 %s
-// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}}
+// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} 
"-ffunction-sections" "-fdata-sections"
+
+// Ditto, but ensure that a user -fno-function-sections disables the
+// default -ffunction-sections.
+
+// RUN: %clang %s -### -target wasm32-unknown-unknown -fno-function-sections 
2>&1 | FileCheck -check-prefix=NO_FUNCTION_SECTIONS %s
+// NO_FUNCTION_SECTIONS-NOT: function-sections
+
+// Ditto, but ensure that a user -fno-data-sections disables the
+// default -fdata-sections.
+
+// RUN: %clang %s -### -target wasm32-unknown-unknown -fno-data-sections 2>&1 
| FileCheck -check-prefix=NO_DATA_SECTIONS %s
+// NO_DATA_SECTIONS-NOT: data-sections
 
 // A basic C link command-line.
 


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r257004 - [WebAssembly] Only enable --gc-sections when optimizations are enabled.

2016-01-06 Thread Dan Gohman via cfe-commits
Author: djg
Date: Wed Jan  6 18:32:04 2016
New Revision: 257004

URL: http://llvm.org/viewvc/llvm-project?rev=257004=rev
Log:
[WebAssembly] Only enable --gc-sections when optimizations are enabled.

Also, revamp the wasm-toolchain.c test and add a test to ensure that
a user-supplied --no-gc-sections comes after --gc-sections.

Modified:
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/Driver/wasm-toolchain.c

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=257004=257003=257004=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Jan  6 18:32:04 2016
@@ -6537,7 +6537,8 @@ void wasm::Linker::ConstructJob(Compilat
 
   // Enable garbage collection of unused input sections by default, since code
   // size is of particular importance.
-  CmdArgs.push_back("--gc-sections");
+  if (areOptimizationsEnabled(Args))
+CmdArgs.push_back("--gc-sections");
 
   AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);
   CmdArgs.push_back("-o");

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=257004=257003=257004=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Wed Jan  6 18:32:04 2016
@@ -1,3 +1,23 @@
-// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown -x 
assembler %s 2>&1 | FileCheck -check-prefix=AS_LINK %s
-// AS_LINK: clang{{.*}}" "-cc1as" {{.*}} "-o" "[[temp:[^"]*]]"
-// AS_LINK: lld{{.*}}" "-flavor" "ld" "--gc-sections" "[[temp]]" "-o" "a.out"
+// A basic clang -cc1 command-line.
+
+// RUN: %clang %s -### -target wasm32-unknown-unknown 2>&1 | FileCheck 
-check-prefix=CC1 %s
+// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}}
+
+// A basic C link command-line.
+
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown %s 
2>&1 | FileCheck -check-prefix=LINK %s
+// LINK: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
+// LINK: lld{{.*}}" "-flavor" "ld" "[[temp]]" "-o" "a.out"
+
+// A basic C link command-line with optimization.
+
+// RUN: %clang -### -O2 -no-canonical-prefixes -target wasm32-unknown-unknown 
%s 2>&1 | FileCheck -check-prefix=LINK_OPT %s
+// LINK_OPT: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
+// LINK_OPT: lld{{.*}}" "-flavor" "ld" "--gc-sections" "[[temp]]" "-o" "a.out"
+
+// Ditto, but ensure that a user --no-gc-sections comes after the
+// default --gc-sections.
+
+// RUN: %clang -### -O2 -no-canonical-prefixes -target wasm32-unknown-unknown 
-Wl,--no-gc-sections %s 2>&1 | FileCheck -check-prefix=NO_GC_SECTIONS %s
+// NO_GC_SECTIONS: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
+// NO_GC_SECTIONS: lld{{.*}}" "-flavor" "ld" "--gc-sections" 
"--no-gc-sections" "[[temp]]" "-o" "a.out"


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r257021 - [WebAssembly] Add -m:e to the target triple.

2016-01-06 Thread Dan Gohman via cfe-commits
Author: djg
Date: Wed Jan  6 21:20:15 2016
New Revision: 257021

URL: http://llvm.org/viewvc/llvm-project?rev=257021=rev
Log:
[WebAssembly] Add -m:e to the target triple.

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/CodeGen/target-data.c

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=257021=257020=257021=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Wed Jan  6 21:20:15 2016
@@ -7281,7 +7281,7 @@ public:
   explicit WebAssembly32TargetInfo(const llvm::Triple )
   : WebAssemblyTargetInfo(T) {
 MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 32;
-DataLayoutString = "e-p:32:32-i64:64-n32:64-S128";
+DataLayoutString = "e-m:e-p:32:32-i64:64-n32:64-S128";
   }
 
 protected:
@@ -7299,7 +7299,7 @@ public:
 LongAlign = LongWidth = 64;
 PointerAlign = PointerWidth = 64;
 MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
-DataLayoutString = "e-p:64:64-i64:64-n32:64-S128";
+DataLayoutString = "e-m:e-p:64:64-i64:64-n32:64-S128";
   }
 
 protected:

Modified: cfe/trunk/test/CodeGen/target-data.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/target-data.c?rev=257021=257020=257021=diff
==
--- cfe/trunk/test/CodeGen/target-data.c (original)
+++ cfe/trunk/test/CodeGen/target-data.c Wed Jan  6 21:20:15 2016
@@ -80,11 +80,11 @@
 
 // RUN: %clang_cc1 -triple wasm32-unknown-unknown -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=WEBASSEMBLY32
-// WEBASSEMBLY32: target datalayout = "e-p:32:32-i64:64-n32:64-S128"
+// WEBASSEMBLY32: target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
 
 // RUN: %clang_cc1 -triple wasm64-unknown-unknown -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=WEBASSEMBLY64
-// WEBASSEMBLY64: target datalayout = "e-p:64:64-i64:64-n32:64-S128"
+// WEBASSEMBLY64: target datalayout = "e-m:e-p:64:64-i64:64-n32:64-S128"
 
 // RUN: %clang_cc1 -triple powerpc-unknown -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=PPC


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r257006 - [WebAssembly] Enable -fvisibility=hidden by default.

2016-01-06 Thread Dan Gohman via cfe-commits
Author: djg
Date: Wed Jan  6 19:00:21 2016
New Revision: 257006

URL: http://llvm.org/viewvc/llvm-project?rev=257006=rev
Log:
[WebAssembly] Enable -fvisibility=hidden by default.

This, along with many things in the WebAssembly target, is experimental.
Feedback is welcome.

Modified:
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/lib/Driver/Tools.h
cfe/trunk/test/Driver/wasm-toolchain.c
cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp
cfe/trunk/test/Driver/wasm64-unknown-unknown.cpp

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=257006=257005=257006=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Jan  6 19:00:21 2016
@@ -2069,6 +2069,16 @@ void Clang::AddHexagonTargetArgs(const A
   CmdArgs.push_back("-machine-sink-split=0");
 }
 
+void Clang::AddWebAssemblyTargetArgs(const ArgList ,
+ ArgStringList ) const {
+  // Default to "hidden" visibility.
+  if (!Args.hasArg(options::OPT_fvisibility_EQ,
+   options::OPT_fvisibility_ms_compat)) {
+CmdArgs.push_back("-fvisibility");
+CmdArgs.push_back("hidden");
+  }
+}
+
 // Decode AArch64 features from string like +[no]featureA+[no]featureB+...
 static bool DecodeAArch64Features(const Driver , StringRef text,
   std::vector ) {
@@ -4015,6 +4025,11 @@ void Clang::ConstructJob(Compilation ,
   case llvm::Triple::hexagon:
 AddHexagonTargetArgs(Args, CmdArgs);
 break;
+
+  case llvm::Triple::wasm32:
+  case llvm::Triple::wasm64:
+AddWebAssemblyTargetArgs(Args, CmdArgs);
+break;
   }
 
   // The 'g' groups options involve a somewhat intricate sequence of decisions

Modified: cfe/trunk/lib/Driver/Tools.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=257006=257005=257006=diff
==
--- cfe/trunk/lib/Driver/Tools.h (original)
+++ cfe/trunk/lib/Driver/Tools.h Wed Jan  6 19:00:21 2016
@@ -82,6 +82,8 @@ private:
 llvm::opt::ArgStringList ) const;
   void AddHexagonTargetArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const;
+  void AddWebAssemblyTargetArgs(const llvm::opt::ArgList ,
+llvm::opt::ArgStringList ) const;
 
   enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
 

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=257006=257005=257006=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Wed Jan  6 19:00:21 2016
@@ -1,7 +1,9 @@
-// A basic clang -cc1 command-line.
+// A basic clang -cc1 command-line. WebAssembly is somewhat special in
+// enabling -ffunction-sections, -fdata-sections, and -fvisibility=hidden by
+// default.
 
 // RUN: %clang %s -### -target wasm32-unknown-unknown 2>&1 | FileCheck 
-check-prefix=CC1 %s
-// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} 
"-ffunction-sections" "-fdata-sections"
+// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} 
"-fvisibility" "hidden" {{.*}} "-ffunction-sections" "-fdata-sections"
 
 // Ditto, but ensure that a user -fno-function-sections disables the
 // default -ffunction-sections.
@@ -21,7 +23,8 @@
 // LINK: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
 // LINK: lld{{.*}}" "-flavor" "ld" "[[temp]]" "-o" "a.out"
 
-// A basic C link command-line with optimization.
+// A basic C link command-line with optimization. WebAssembly is somewhat
+// special in enabling --gc-sections by default.
 
 // RUN: %clang -### -O2 -no-canonical-prefixes -target wasm32-unknown-unknown 
%s 2>&1 | FileCheck -check-prefix=LINK_OPT %s
 // LINK_OPT: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"

Modified: cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp?rev=257006=257005=257006=diff
==
--- cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp (original)
+++ cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp Wed Jan  6 19:00:21 2016
@@ -13,34 +13,34 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
 
 extern "C" {
 
-// CHECK: @align_c = global i32 1
+// CHECK: @align_c = hidden global i32 1
 int align_c = __alignof(char);
 
-// CHECK: @align_s = global i32 2
+// CHECK: @align_s = hidden global i32 2
 int align_s = __alignof(short);
 
-// CHECK: @align_i = global i32 4
+// CHECK: @align_i = hidden global i32 4
 int align_i = __alignof(int);
 
-// CHECK: @align_l = global i32 4
+// CHECK: @align_l = hidden global i32 4
 int align_l = 

r257007 - [WebAssembly] Add a test to ensure that -fvisibility=default works.

2016-01-06 Thread Dan Gohman via cfe-commits
Author: djg
Date: Wed Jan  6 19:15:05 2016
New Revision: 257007

URL: http://llvm.org/viewvc/llvm-project?rev=257007=rev
Log:
[WebAssembly] Add a test to ensure that -fvisibility=default works.

It should override the default of -fvisibility=hidden.

Modified:
cfe/trunk/test/Driver/wasm-toolchain.c

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=257007=257006=257007=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Wed Jan  6 19:15:05 2016
@@ -17,6 +17,12 @@
 // RUN: %clang %s -### -target wasm32-unknown-unknown -fno-data-sections 2>&1 
| FileCheck -check-prefix=NO_DATA_SECTIONS %s
 // NO_DATA_SECTIONS-NOT: data-sections
 
+// Ditto, but ensure that a user -fvisibility=default disables the default
+// -fvisibilt=hidden.
+
+// RUN: %clang %s -### -target wasm32-unknown-unknown -fvisibility=default 
2>&1 | FileCheck -check-prefix=FVISIBILITY_DEFAULT %s
+// FVISIBILITY_DEFAULT-NOT: hidden
+
 // A basic C link command-line.
 
 // RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown %s 
2>&1 | FileCheck -check-prefix=LINK %s


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r256967 - [WebAssembly] Add --gc-sections to the link line.

2016-01-06 Thread Dan Gohman via cfe-commits
Author: djg
Date: Wed Jan  6 13:43:32 2016
New Revision: 256967

URL: http://llvm.org/viewvc/llvm-project?rev=256967=rev
Log:
[WebAssembly] Add --gc-sections to the link line.

This will eventually be accompanied with a change to enable -ffunction-sections
and -fdata-sections by default, which is currently delayed by some development
process issues.

Modified:
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/Driver/wasm-toolchain.c

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=256967=256966=256967=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Jan  6 13:43:32 2016
@@ -6534,6 +6534,11 @@ void wasm::Linker::ConstructJob(Compilat
   ArgStringList CmdArgs;
   CmdArgs.push_back("-flavor");
   CmdArgs.push_back("ld");
+
+  // Enable garbage collection of unused input sections by default, since code
+  // size is of particular importance.
+  CmdArgs.push_back("--gc-sections");
+
   AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);
   CmdArgs.push_back("-o");
   CmdArgs.push_back(Output.getFilename());

Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=256967=256966=256967=diff
==
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Wed Jan  6 13:43:32 2016
@@ -1,3 +1,3 @@
 // RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown -x 
assembler %s 2>&1 | FileCheck -check-prefix=AS_LINK %s
 // AS_LINK: clang{{.*}}" "-cc1as" {{.*}} "-o" "[[temp:[^"]*]]"
-// AS_LINK: lld{{.*}}" "-flavor" "ld" "[[temp]]" "-o" "a.out"
+// AS_LINK: lld{{.*}}" "-flavor" "ld" "--gc-sections" "[[temp]]" "-o" "a.out"


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r256216 - [WebAssembly] Remove the -target command-line flag from the ld commandline.

2015-12-23 Thread Dan Gohman via cfe-commits
It appears the reason it was only caught on Windows was that only Windows
appends ".exe" to executable files. Your change to match lld with {{.*}}
appended fixes it. Thanks!

Dan


On Tue, Dec 22, 2015 at 2:34 PM, Nico Weber <tha...@chromium.org> wrote:

> This might have broken the test on Windows:
>
> Command 1 Stderr:
> C:\src\chrome\src\third_party\llvm\tools\clang\test\Driver\wasm-toolchain.c:3:13:
> error: expected string not found in in
> put
> // AS_LINK: lld" "-flavor" "ld" "[[temp]]" "-o" "a.out"
> ^
> :5:476: note: scanning from here
>  "C:/src/chrome/src/third_party/llvm-bootstrap/./bin/clang.EXE" "-cc1as"
> "-triple" "wasm32-unknown-unknown" "-filetype"
> "obj" "-main-file-name" "wasm-toolchain.c" "-target-cpu" "generic"
> "-dwarf-version=4" "-fdebug-compilation-dir" "C:\\src
> \\chrome\\src\\third_party\\llvm-bootstrap\\tools\\clang\\test\\Driver"
> "-dwarf-debug-producer" "clang version 3.8.0 (tr
> unk 256248)" "-mrelocation-model" "static" "-o"
> "C:\\Users\\thakis\\AppData\\Local\\Temp\\wasm-toolchain-f6ec86.o" "C:\\
>
> src\\chrome\\src\\third_party\\llvm\\tools\\clang\\test\\Driver\\wasm-toolchain.c"
>
>
>
>
>  ^
> :5:476: note: with variable "temp" equal to
> "C:UsersthakisAppDataLocalTempwasm-toolchain-
> f6ec86.o"
>  "C:/src/chrome/src/third_party/llvm-bootstrap/./bin/clang.EXE" "-cc1as"
> "-triple" "wasm32-unknown-unknown" "-filetype"
> "obj" "-main-file-name" "wasm-toolchain.c" "-target-cpu" "generic"
> "-dwarf-version=4" "-fdebug-compilation-dir" "C:\\src
> \\chrome\\src\\third_party\\llvm-bootstrap\\tools\\clang\\test\\Driver"
> "-dwarf-debug-producer" "clang version 3.8.0 (tr
> unk 256248)" "-mrelocation-model" "static" "-o"
> "C:\\Users\\thakis\\AppData\\Local\\Temp\\wasm-toolchain-f6ec86.o" "C:\\
>
> src\\chrome\\src\\third_party\\llvm\\tools\\clang\\test\\Driver\\wasm-toolchain.c"
>
>
>
>
>  ^
> :6:63: note: possible intended match here
>  "C:\\src\\chrome\\src\\third_party\\llvm-bootstrap\\bin\\lld.exe"
> "-flavor" "ld" "C:\\Users\\thakis\\AppData\\Local\\Te
> mp\\wasm-toolchain-f6ec86.o" "-o" "a.out"
>   ^
>
> I think I fixed this in 256286, but I'm a bit surprised this wasn't caught
> by any LLVM bots. Can you check why this wasn't caught?
>
> On Mon, Dec 21, 2015 at 6:30 PM, Dan Gohman via cfe-commits <
> cfe-commits@lists.llvm.org> wrote:
>
>> Author: djg
>> Date: Mon Dec 21 17:30:41 2015
>> New Revision: 256216
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=256216=rev
>> Log:
>> [WebAssembly] Remove the -target command-line flag from the ld
>> commandline.
>>
>> This flag isn't needed, or permitted, with the "ld" flavor of lld.
>>
>> Also, add a basic ld commandline test.
>>
>> Added:
>> cfe/trunk/test/Driver/wasm-toolchain.c
>> Modified:
>> cfe/trunk/lib/Driver/Tools.cpp
>>
>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=256216=256215=256216=diff
>>
>> ==
>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>> +++ cfe/trunk/lib/Driver/Tools.cpp Mon Dec 21 17:30:41 2015
>> @@ -6516,8 +6516,6 @@ void wasm::Linker::ConstructJob(Compilat
>>ArgStringList CmdArgs;
>>CmdArgs.push_back("-flavor");
>>CmdArgs.push_back("ld");
>> -  CmdArgs.push_back("-target");
>> -
>> CmdArgs.push_back(Args.MakeArgString(getToolChain().getTripleString()));
>>AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);
>>CmdArgs.push_back("-o");
>>CmdArgs.push_back(Output.getFilename());
>>
>> Added: cfe/trunk/test/Driver/wasm-toolchain.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=256216=auto
>>
>> ==
>> --- cfe/trunk/test/Driver/wasm-toolchain.c (added)
>> +++ cfe/trunk/test/Driver/wasm-toolchain.c Mon Dec 21 17:30:41 2015
>> @@ -0,0 +1,3 @@
>> +// RUN: %clang -### -target wasm32-unknown-unknown -x assembler %s 2>&1
>> | FileCheck -check-prefix=AS_LINK %s
>> +// AS_LINK: clang{{.*}}" "-cc1as" {{.*}} "-o" "[[temp:[^"]*]]"
>> +// AS_LINK: lld" "-flavor" "ld" "[[temp]]" "-o" "a.out"
>>
>>
>> ___
>> cfe-commits mailing list
>> cfe-commits@lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r256216 - [WebAssembly] Remove the -target command-line flag from the ld commandline.

2015-12-23 Thread Dan Gohman via cfe-commits
It looks like the two Windows buildbots for clang on that page are already
red for other reasons.

Dan


On Tue, Dec 22, 2015 at 2:54 PM, Nico Weber <tha...@chromium.org> wrote:

> Well yes, but we have a Windows bot on http://lab.llvm.org:8011/console,
> right?
>
> On Tue, Dec 22, 2015 at 5:54 PM, Dan Gohman <sunf...@mozilla.com> wrote:
>
>> It appears the reason it was only caught on Windows was that only Windows
>> appends ".exe" to executable files. Your change to match lld with {{.*}}
>> appended fixes it. Thanks!
>>
>> Dan
>>
>>
>> On Tue, Dec 22, 2015 at 2:34 PM, Nico Weber <tha...@chromium.org> wrote:
>>
>>> This might have broken the test on Windows:
>>>
>>> Command 1 Stderr:
>>> C:\src\chrome\src\third_party\llvm\tools\clang\test\Driver\wasm-toolchain.c:3:13:
>>> error: expected string not found in in
>>> put
>>> // AS_LINK: lld" "-flavor" "ld" "[[temp]]" "-o" "a.out"
>>> ^
>>> :5:476: note: scanning from here
>>>  "C:/src/chrome/src/third_party/llvm-bootstrap/./bin/clang.EXE" "-cc1as"
>>> "-triple" "wasm32-unknown-unknown" "-filetype"
>>> "obj" "-main-file-name" "wasm-toolchain.c" "-target-cpu" "generic"
>>> "-dwarf-version=4" "-fdebug-compilation-dir" "C:\\src
>>> \\chrome\\src\\third_party\\llvm-bootstrap\\tools\\clang\\test\\Driver"
>>> "-dwarf-debug-producer" "clang version 3.8.0 (tr
>>> unk 256248)" "-mrelocation-model" "static" "-o"
>>> "C:\\Users\\thakis\\AppData\\Local\\Temp\\wasm-toolchain-f6ec86.o" "C:\\
>>>
>>> src\\chrome\\src\\third_party\\llvm\\tools\\clang\\test\\Driver\\wasm-toolchain.c"
>>>
>>>
>>>
>>>
>>>^
>>> :5:476: note: with variable "temp" equal to
>>> "C:UsersthakisAppDataLocalTempwasm-toolchain-
>>> f6ec86.o"
>>>  "C:/src/chrome/src/third_party/llvm-bootstrap/./bin/clang.EXE" "-cc1as"
>>> "-triple" "wasm32-unknown-unknown" "-filetype"
>>> "obj" "-main-file-name" "wasm-toolchain.c" "-target-cpu" "generic"
>>> "-dwarf-version=4" "-fdebug-compilation-dir" "C:\\src
>>> \\chrome\\src\\third_party\\llvm-bootstrap\\tools\\clang\\test\\Driver"
>>> "-dwarf-debug-producer" "clang version 3.8.0 (tr
>>> unk 256248)" "-mrelocation-model" "static" "-o"
>>> "C:\\Users\\thakis\\AppData\\Local\\Temp\\wasm-toolchain-f6ec86.o" "C:\\
>>>
>>> src\\chrome\\src\\third_party\\llvm\\tools\\clang\\test\\Driver\\wasm-toolchain.c"
>>>
>>>
>>>
>>>
>>>^
>>> :6:63: note: possible intended match here
>>>  "C:\\src\\chrome\\src\\third_party\\llvm-bootstrap\\bin\\lld.exe"
>>> "-flavor" "ld" "C:\\Users\\thakis\\AppData\\Local\\Te
>>> mp\\wasm-toolchain-f6ec86.o" "-o" "a.out"
>>>   ^
>>>
>>> I think I fixed this in 256286, but I'm a bit surprised this wasn't
>>> caught by any LLVM bots. Can you check why this wasn't caught?
>>>
>>> On Mon, Dec 21, 2015 at 6:30 PM, Dan Gohman via cfe-commits <
>>> cfe-commits@lists.llvm.org> wrote:
>>>
>>>> Author: djg
>>>> Date: Mon Dec 21 17:30:41 2015
>>>> New Revision: 256216
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=256216=rev
>>>> Log:
>>>> [WebAssembly] Remove the -target command-line flag from the ld
>>>> commandline.
>>>>
>>>> This flag isn't needed, or permitted, with the "ld" flavor of lld.
>>>>
>>>> Also, add a basic ld commandline test.
>>>>
>>>> Added:
>>>> cfe/trunk/test/Driver/wasm-toolchain.c
>>>> Modified:
>>>> cfe/trunk/lib/Driver/Tools.cpp
>>>>
>>>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=256216=256215=2

[PATCH] D15586: [WebAssembly] Initial linking support.

2015-12-16 Thread Dan Gohman via cfe-commits
sunfish created this revision.
sunfish added subscribers: cfe-commits, jfb, dschuff.
sunfish set the repository for this revision to rL LLVM.

This begins minimal support for invoking 'ld' from clang for WebAssembly 
targets.

Repository:
  rL LLVM

http://reviews.llvm.org/D15586

Files:
  lib/Driver/ToolChains.cpp
  lib/Driver/ToolChains.h
  lib/Driver/Tools.cpp
  lib/Driver/Tools.h

Index: lib/Driver/Tools.h
===
--- lib/Driver/Tools.h
+++ lib/Driver/Tools.h
@@ -245,6 +245,21 @@
 
 } // end namespace amdgpu
 
+namespace wasm {
+
+class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool {
+public:
+  explicit Linker(const ToolChain );
+  bool isLinkJob() const override;
+  bool hasIntegratedCPP() const override;
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char *LinkingOutput) const override;
+};
+
+} // end namespace wasm
+
 namespace arm {
 std::string getARMTargetCPU(StringRef CPU, StringRef Arch,
 const llvm::Triple );
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -6439,6 +6439,34 @@
 }
 // AMDGPU tools end.
 
+wasm::Linker::Linker(const ToolChain )
+  : GnuTool("wasm::Linker", "lld", TC) {}
+
+bool wasm::Linker::isLinkJob() const {
+  return true;
+}
+
+bool wasm::Linker::hasIntegratedCPP() const {
+  return false;
+}
+
+void wasm::Linker::ConstructJob(Compilation , const JobAction ,
+const InputInfo ,
+const InputInfoList ,
+const ArgList ,
+const char *LinkingOutput) const {
+  const char *Linker = Args.MakeArgString(getToolChain().GetLinkerPath());
+  ArgStringList CmdArgs;
+  CmdArgs.push_back("-flavor");
+  CmdArgs.push_back("ld");
+  CmdArgs.push_back("-target");
+  CmdArgs.push_back(Args.MakeArgString(getToolChain().getTripleString()));
+  AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);
+  CmdArgs.push_back("-o");
+  CmdArgs.push_back(Output.getFilename());
+  C.addCommand(llvm::make_unique(JA, *this, Linker, CmdArgs, Inputs));
+}
+
 const std::string arm::getARMArch(StringRef Arch, const llvm::Triple ) {
   std::string MArch;
   if (!Arch.empty())
Index: lib/Driver/ToolChains.h
===
--- lib/Driver/ToolChains.h
+++ lib/Driver/ToolChains.h
@@ -1088,8 +1088,7 @@
 class LLVM_LIBRARY_VISIBILITY WebAssembly final : public ToolChain {
 public:
   WebAssembly(const Driver , const llvm::Triple ,
-  const llvm::opt::ArgList )
-  : ToolChain(D, Triple, Args) {}
+  const llvm::opt::ArgList );
 
 private:
   bool IsMathErrnoDefault() const override;
@@ -1102,8 +1101,11 @@
   bool hasBlocksRuntime() const override;
   bool SupportsObjCGC() const override;
   bool SupportsProfiling() const override;
+  bool HasNativeLLVMSupport() const override;
   void addClangTargetOptions(const llvm::opt::ArgList ,
  llvm::opt::ArgStringList ) const override;
+
+  Tool *buildLinker() const override;
 };
 
 class LLVM_LIBRARY_VISIBILITY PS4CPU : public Generic_ELF {
Index: lib/Driver/ToolChains.cpp
===
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -4418,6 +4418,13 @@
   return new tools::Myriad::Linker(*this);
 }
 
+WebAssembly::WebAssembly(const Driver , const llvm::Triple ,
+ const llvm::opt::ArgList )
+  : ToolChain(D, Triple, Args) {
+  // Use LLD by default.
+  DefaultLinker = "lld";
+}
+
 bool WebAssembly::IsMathErrnoDefault() const { return false; }
 
 bool WebAssembly::IsObjCNonFragileABIDefault() const { return true; }
@@ -4440,13 +4447,19 @@
 // TODO: Support profiling.
 bool WebAssembly::SupportsProfiling() const { return false; }
 
+bool WebAssembly::HasNativeLLVMSupport() const { return true; }
+
 void WebAssembly::addClangTargetOptions(const ArgList ,
 ArgStringList ) const {
   if (DriverArgs.hasFlag(options::OPT_fuse_init_array,
  options::OPT_fno_use_init_array, true))
 CC1Args.push_back("-fuse-init-array");
 }
 
+Tool *WebAssembly::buildLinker() const {
+  return new tools::wasm::Linker(*this);
+}
+
 PS4CPU::PS4CPU(const Driver , const llvm::Triple , const ArgList )
 : Generic_ELF(D, Triple, Args) {
   if (Args.hasArg(options::OPT_static))
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r255848 - [WebAssembly] Initial linking support.

2015-12-16 Thread Dan Gohman via cfe-commits
Author: djg
Date: Wed Dec 16 17:30:41 2015
New Revision: 255848

URL: http://llvm.org/viewvc/llvm-project?rev=255848=rev
Log:
[WebAssembly] Initial linking support.

This begins minimal support for invoking 'ld' from clang for WebAssembly
targets.

Differential Revision: http://reviews.llvm.org/D15586

Modified:
cfe/trunk/lib/Driver/ToolChains.cpp
cfe/trunk/lib/Driver/ToolChains.h
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/lib/Driver/Tools.h

Modified: cfe/trunk/lib/Driver/ToolChains.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=255848=255847=255848=diff
==
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Dec 16 17:30:41 2015
@@ -4418,6 +4418,13 @@ Tool *MyriadToolChain::buildLinker() con
   return new tools::Myriad::Linker(*this);
 }
 
+WebAssembly::WebAssembly(const Driver , const llvm::Triple ,
+ const llvm::opt::ArgList )
+  : ToolChain(D, Triple, Args) {
+  // Use LLD by default.
+  DefaultLinker = "lld";
+}
+
 bool WebAssembly::IsMathErrnoDefault() const { return false; }
 
 bool WebAssembly::IsObjCNonFragileABIDefault() const { return true; }
@@ -4440,6 +4447,8 @@ bool WebAssembly::hasBlocksRuntime() con
 // TODO: Support profiling.
 bool WebAssembly::SupportsProfiling() const { return false; }
 
+bool WebAssembly::HasNativeLLVMSupport() const { return true; }
+
 void WebAssembly::addClangTargetOptions(const ArgList ,
 ArgStringList ) const {
   if (DriverArgs.hasFlag(options::OPT_fuse_init_array,
@@ -4447,6 +4456,10 @@ void WebAssembly::addClangTargetOptions(
 CC1Args.push_back("-fuse-init-array");
 }
 
+Tool *WebAssembly::buildLinker() const {
+  return new tools::wasm::Linker(*this);
+}
+
 PS4CPU::PS4CPU(const Driver , const llvm::Triple , const ArgList 
)
 : Generic_ELF(D, Triple, Args) {
   if (Args.hasArg(options::OPT_static))

Modified: cfe/trunk/lib/Driver/ToolChains.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=255848=255847=255848=diff
==
--- cfe/trunk/lib/Driver/ToolChains.h (original)
+++ cfe/trunk/lib/Driver/ToolChains.h Wed Dec 16 17:30:41 2015
@@ -1088,8 +1088,7 @@ private:
 class LLVM_LIBRARY_VISIBILITY WebAssembly final : public ToolChain {
 public:
   WebAssembly(const Driver , const llvm::Triple ,
-  const llvm::opt::ArgList )
-  : ToolChain(D, Triple, Args) {}
+  const llvm::opt::ArgList );
 
 private:
   bool IsMathErrnoDefault() const override;
@@ -1102,8 +1101,11 @@ private:
   bool hasBlocksRuntime() const override;
   bool SupportsObjCGC() const override;
   bool SupportsProfiling() const override;
+  bool HasNativeLLVMSupport() const override;
   void addClangTargetOptions(const llvm::opt::ArgList ,
  llvm::opt::ArgStringList ) const override;
+
+  Tool *buildLinker() const override;
 };
 
 class LLVM_LIBRARY_VISIBILITY PS4CPU : public Generic_ELF {

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=255848=255847=255848=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Dec 16 17:30:41 2015
@@ -6439,6 +6439,34 @@ void amdgpu::Linker::ConstructJob(Compil
 }
 // AMDGPU tools end.
 
+wasm::Linker::Linker(const ToolChain )
+  : GnuTool("wasm::Linker", "lld", TC) {}
+
+bool wasm::Linker::isLinkJob() const {
+  return true;
+}
+
+bool wasm::Linker::hasIntegratedCPP() const {
+  return false;
+}
+
+void wasm::Linker::ConstructJob(Compilation , const JobAction ,
+const InputInfo ,
+const InputInfoList ,
+const ArgList ,
+const char *LinkingOutput) const {
+  const char *Linker = Args.MakeArgString(getToolChain().GetLinkerPath());
+  ArgStringList CmdArgs;
+  CmdArgs.push_back("-flavor");
+  CmdArgs.push_back("ld");
+  CmdArgs.push_back("-target");
+  CmdArgs.push_back(Args.MakeArgString(getToolChain().getTripleString()));
+  AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);
+  CmdArgs.push_back("-o");
+  CmdArgs.push_back(Output.getFilename());
+  C.addCommand(llvm::make_unique(JA, *this, Linker, CmdArgs, Inputs));
+}
+
 const std::string arm::getARMArch(StringRef Arch, const llvm::Triple ) {
   std::string MArch;
   if (!Arch.empty())

Modified: cfe/trunk/lib/Driver/Tools.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=255848=255847=255848=diff
==
--- cfe/trunk/lib/Driver/Tools.h (original)
+++ cfe/trunk/lib/Driver/Tools.h Wed Dec 16 17:30:41 2015
@@ 

Re: r255848 - [WebAssembly] Initial linking support.

2015-12-16 Thread Dan Gohman via cfe-commits
On Wed, Dec 16, 2015 at 5:20 PM, Rafael Espíndola <
rafael.espind...@gmail.com> wrote:

> testcase?
>

Also, this is passing -target to ld, which is not a valid option.
>

This patch is mainly setting up some minimal infrastructure. The actual
link command-line will need additional changes to be usable, and I plan to
add tests when it's further along.

Dan
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r253146 - [WebAssembly] Remove the "const" attribute from __builtin_wasm_memory_size.

2015-11-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Sat Nov 14 16:57:34 2015
New Revision: 253146

URL: http://llvm.org/viewvc/llvm-project?rev=253146=rev
Log:
[WebAssembly] Remove the "const" attribute from __builtin_wasm_memory_size.

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=253146=253145=253146=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Sat Nov 14 16:57:34 
2015
@@ -16,7 +16,9 @@
 
 // The format of this database matches clang/Basic/Builtins.def.
 
-BUILTIN(__builtin_wasm_memory_size, "z", "nc")
+// Note that memory_size is not "c" (readnone) because it must be sequenced 
with
+// respect to grow_memory calls.
+BUILTIN(__builtin_wasm_memory_size, "z", "n")
 BUILTIN(__builtin_wasm_grow_memory, "vz", "n")
 
 #undef BUILTIN


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r252646 - [WebAssembly] Change long double to be quadruple-precision floating point.

2015-11-10 Thread Dan Gohman via cfe-commits
Author: djg
Date: Tue Nov 10 15:01:46 2015
New Revision: 252646

URL: http://llvm.org/viewvc/llvm-project?rev=252646=rev
Log:
[WebAssembly] Change long double to be quadruple-precision floating point.

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/CodeGen/wasm-arguments.c
cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp
cfe/trunk/test/Driver/wasm64-unknown-unknown.cpp
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=252646=252645=252646=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Tue Nov 10 15:01:46 2015
@@ -7081,6 +7081,8 @@ public:
 LargeArrayAlign = 128;
 SimdDefaultAlign = 128;
 SigAtomicType = SignedLong;
+LongDoubleWidth = LongDoubleAlign = 128;
+LongDoubleFormat = ::APFloat::IEEEquad;
   }
 
 protected:

Modified: cfe/trunk/test/CodeGen/wasm-arguments.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/wasm-arguments.c?rev=252646=252645=252646=diff
==
--- cfe/trunk/test/CodeGen/wasm-arguments.c (original)
+++ cfe/trunk/test/CodeGen/wasm-arguments.c Tue Nov 10 15:01:46 2015
@@ -5,8 +5,8 @@
 
 // Basic argument/attribute tests for WebAssembly
 
-// WEBASSEMBLY32: define void @f0(i32 %i, i32 %j, i64 %k, double %l, double %m)
-// WEBASSEMBLY64: define void @f0(i32 %i, i64 %j, i64 %k, double %l, double %m)
+// WEBASSEMBLY32: define void @f0(i32 %i, i32 %j, i64 %k, double %l, fp128 %m)
+// WEBASSEMBLY64: define void @f0(i32 %i, i64 %j, i64 %k, double %l, fp128 %m)
 void f0(int i, long j, long long k, double l, long double m) {}
 
 typedef struct {

Modified: cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp?rev=252646=252645=252646=diff
==
--- cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp (original)
+++ cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp Tue Nov 10 15:01:46 2015
@@ -37,7 +37,7 @@ int align_f = __alignof(float);
 // CHECK: @align_d = global i32 8
 int align_d = __alignof(double);
 
-// CHECK: @align_ld = global i32 8
+// CHECK: @align_ld = global i32 16
 int align_ld = __alignof(long double);
 
 // CHECK: @align_vl = global i32 4
@@ -97,7 +97,7 @@ float check_float() { return 0; }
 // CHECK: double @check_double()
 double check_double() { return 0; }
 
-// CHECK: double @check_longdouble()
+// CHECK: fp128 @check_longdouble()
 long double check_longdouble() { return 0; }
 
 }

Modified: cfe/trunk/test/Driver/wasm64-unknown-unknown.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm64-unknown-unknown.cpp?rev=252646=252645=252646=diff
==
--- cfe/trunk/test/Driver/wasm64-unknown-unknown.cpp (original)
+++ cfe/trunk/test/Driver/wasm64-unknown-unknown.cpp Tue Nov 10 15:01:46 2015
@@ -37,7 +37,7 @@ int align_f = __alignof(float);
 // CHECK: @align_d = global i32 8
 int align_d = __alignof(double);
 
-// CHECK: @align_ld = global i32 8
+// CHECK: @align_ld = global i32 16
 int align_ld = __alignof(long double);
 
 // CHECK: @align_vl = global i32 8
@@ -97,7 +97,7 @@ float check_float() { return 0; }
 // CHECK: double @check_double()
 double check_double() { return 0; }
 
-// CHECK: double @check_longdouble()
+// CHECK: fp128 @check_longdouble()
 long double check_longdouble() { return 0; }
 
 }

Modified: cfe/trunk/test/Preprocessor/init.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=252646=252645=252646=diff
==
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Tue Nov 10 15:01:46 2015
@@ -8549,20 +8549,20 @@
 // WEBASSEMBLY32-NEXT:#define __INT_LEAST8_MAX__ 127{{$}}
 // WEBASSEMBLY32-NEXT:#define __INT_LEAST8_TYPE__ signed char{{$}}
 // WEBASSEMBLY32-NEXT:#define __INT_MAX__ 2147483647{{$}}
-// WEBASSEMBLY32-NEXT:#define __LDBL_DECIMAL_DIG__ 17{{$}}
-// WEBASSEMBLY32-NEXT:#define __LDBL_DENORM_MIN__ 4.9406564584124654e-324L{{$}}
-// WEBASSEMBLY32-NEXT:#define __LDBL_DIG__ 15{{$}}
-// WEBASSEMBLY32-NEXT:#define __LDBL_EPSILON__ 2.2204460492503131e-16L{{$}}
+// WEBASSEMBLY32-NEXT:#define __LDBL_DECIMAL_DIG__ 36{{$}}
+// WEBASSEMBLY32-NEXT:#define __LDBL_DENORM_MIN__ 
6.47517511943802511092443895822764655e-4966L{{$}}
+// WEBASSEMBLY32-NEXT:#define __LDBL_DIG__ 33{{$}}
+// WEBASSEMBLY32-NEXT:#define __LDBL_EPSILON__ 
1.92592994438723585305597794258492732e-34L{{$}}
 // WEBASSEMBLY32-NEXT:#define __LDBL_HAS_DENORM__ 1{{$}}
 // WEBASSEMBLY32-NEXT:#define __LDBL_HAS_INFINITY__ 1{{$}}
 // WEBASSEMBLY32-NEXT:#define 

r252201 - [WebAssembly] Update wasm builtin functions to match spec changes.

2015-11-05 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Nov  5 14:16:37 2015
New Revision: 252201

URL: http://llvm.org/viewvc/llvm-project?rev=252201=rev
Log:
[WebAssembly] Update wasm builtin functions to match spec changes.

The page_size operator has been removed from the spec, and the resize_memory
operator has been changed to grow_memory.

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/test/CodeGen/builtins-wasm.c

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=252201=252200=252201=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Thu Nov  5 14:16:37 
2015
@@ -16,8 +16,7 @@
 
 // The format of this database matches clang/Basic/Builtins.def.
 
-BUILTIN(__builtin_wasm_page_size, "z", "nc")
 BUILTIN(__builtin_wasm_memory_size, "z", "nc")
-BUILTIN(__builtin_wasm_resize_memory, "vz", "n")
+BUILTIN(__builtin_wasm_grow_memory, "vz", "n")
 
 #undef BUILTIN

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=252201=252200=252201=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Thu Nov  5 14:16:37 2015
@@ -7274,19 +7274,14 @@ Value *CodeGenFunction::EmitNVPTXBuiltin
 Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
const CallExpr *E) {
   switch (BuiltinID) {
-  case WebAssembly::BI__builtin_wasm_page_size: {
-llvm::Type *ResultType = ConvertType(E->getType());
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_page_size, ResultType);
-return Builder.CreateCall(Callee);
-  }
   case WebAssembly::BI__builtin_wasm_memory_size: {
 llvm::Type *ResultType = ConvertType(E->getType());
 Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_memory_size, ResultType);
 return Builder.CreateCall(Callee);
   }
-  case WebAssembly::BI__builtin_wasm_resize_memory: {
+  case WebAssembly::BI__builtin_wasm_grow_memory: {
 Value *X = EmitScalarExpr(E->getArg(0));
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_resize_memory, 
X->getType());
+Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_grow_memory, 
X->getType());
 return Builder.CreateCall(Callee, X);
   }
 

Modified: cfe/trunk/test/CodeGen/builtins-wasm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-wasm.c?rev=252201=252200=252201=diff
==
--- cfe/trunk/test/CodeGen/builtins-wasm.c (original)
+++ cfe/trunk/test/CodeGen/builtins-wasm.c Thu Nov  5 14:16:37 2015
@@ -3,12 +3,6 @@
 // RUN: %clang_cc1 -triple wasm64-unknown-unknown -O3 -emit-llvm -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY64
 
-__SIZE_TYPE__ f0(void) {
-  return __builtin_wasm_page_size();
-// WEBASSEMBLY32: call {{i.*}} @llvm.wasm.page.size.i32()
-// WEBASSEMBLY64: call {{i.*}} @llvm.wasm.page.size.i64()
-}
-
 __SIZE_TYPE__ f1(void) {
   return __builtin_wasm_memory_size();
 // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.memory.size.i32()
@@ -16,7 +10,7 @@ __SIZE_TYPE__ f1(void) {
 }
 
 void f2(long delta) {
-  __builtin_wasm_resize_memory(delta);
-// WEBASSEMBLY32: call void @llvm.wasm.resize.memory.i32(i32 %{{.*}})
-// WEBASSEMBLY64: call void @llvm.wasm.resize.memory.i64(i64 %{{.*}})
+  __builtin_wasm_grow_memory(delta);
+// WEBASSEMBLY32: call void @llvm.wasm.grow.memory.i32(i32 %{{.*}})
+// WEBASSEMBLY64: call void @llvm.wasm.grow.memory.i64(i64 %{{.*}})
 }


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r249176 - [WebAssembly] Add a __builtin_wasm_memory_size() intrinsic.

2015-10-02 Thread Dan Gohman via cfe-commits
Author: djg
Date: Fri Oct  2 14:38:47 2015
New Revision: 249176

URL: http://llvm.org/viewvc/llvm-project?rev=249176=rev
Log:
[WebAssembly] Add a __builtin_wasm_memory_size() intrinsic.

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/test/CodeGen/builtins-wasm.c

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=249176=249175=249176=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Fri Oct  2 14:38:47 
2015
@@ -17,5 +17,6 @@
 // The format of this database matches clang/Basic/Builtins.def.
 
 BUILTIN(__builtin_wasm_page_size, "z", "nc")
+BUILTIN(__builtin_wasm_memory_size, "z", "nc")
 
 #undef BUILTIN

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=249176=249175=249176=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Fri Oct  2 14:38:47 2015
@@ -7048,6 +7048,11 @@ Value *CodeGenFunction::EmitWebAssemblyB
 Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_page_size, ResultType);
 return Builder.CreateCall(Callee);
   }
+  case WebAssembly::BI__builtin_wasm_memory_size: {
+llvm::Type *ResultType = ConvertType(E->getType());
+Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_memory_size, ResultType);
+return Builder.CreateCall(Callee);
+  }
 
   default:
 return nullptr;

Modified: cfe/trunk/test/CodeGen/builtins-wasm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-wasm.c?rev=249176=249175=249176=diff
==
--- cfe/trunk/test/CodeGen/builtins-wasm.c (original)
+++ cfe/trunk/test/CodeGen/builtins-wasm.c Fri Oct  2 14:38:47 2015
@@ -8,3 +8,9 @@ __SIZE_TYPE__ f0(void) {
 // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.page.size.i32()
 // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.page.size.i64()
 }
+
+__SIZE_TYPE__ f1(void) {
+  return __builtin_wasm_memory_size();
+// WEBASSEMBLY32: call {{i.*}} @llvm.wasm.memory.size.i32()
+// WEBASSEMBLY64: call {{i.*}} @llvm.wasm.memory.size.i64()
+}


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D13128: Fix backend crash on multiple close of stdout.

2015-09-29 Thread Dan Gohman via cfe-commits
sunfish added a comment.

> In any case, that's not how clang deal with usage or even internal unexpected 
> errors. It asserts, print error messages but does not crash on purpose. 
> Having clang crash here does not seem like a good solution and will result in 
> this issue continue to surface again.


When clang has bugs, it is common for it to crash unceremoniously. That said, 
if you know of a reasonable way to assert here before the crash, that'd be 
great.

> The bad thing is that the same problem can be reproduced not only in 
> frontend, but also in opt tool. The test I wrote (test/Other/empty.ll) also 
> failed with the same message.


This could also be interpreted as opt failing to check for incompatible 
command-line options. One of the command-line options in this case is a hidden 
option, so this isn't especially surprising.

> And Yaron is right, I need to mix several outputs in stdout. What should I do 
> in this case?


What's the context? It may be worth investigating whether there are other ways 
to address your need.

If you want to use -rewrite-map-file and -info-output-file in a testcase at the 
same time, see the documentation for '%t' in the TestingGuide for creating 
multiple temporary output files.


http://reviews.llvm.org/D13128



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D13128: Fix backend crash on multiple close of stdout.

2015-09-25 Thread Dan Gohman via cfe-commits
sunfish added a comment.

This code has been questioned in this way before, and every time it comes up, 
it turns out that there's a bug somewhere else that really ought to be fixed 
anyway.

In previous iterations of this discussion, when clang is found attempting to 
print something like a dep file to the same stream as the normal compiler 
output file, this is not actually desirable behavior because it mixes two 
different kinds of output. Besides the fact that this typically isn't what a 
user actually wants, it can cause serious problems if one of the stream needs 
to use "binary" mode and the other doesn't, for example.

The resolution has been to have clang issue an error if the dep file and the 
output file are both using stdout, which is nice to do, because if a user is 
asking for this it's likely not intentional. With this done, there is no longer 
a way to crash the compiler, and there's no need to change how raw_fd_ostream 
works.


http://reviews.llvm.org/D13128



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r247623 - [WebAssembly] Simplify code by avoiding duplicating the default behavior.

2015-09-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Sep 14 16:54:32 2015
New Revision: 247623

URL: http://llvm.org/viewvc/llvm-project?rev=247623=rev
Log:
[WebAssembly] Simplify code by avoiding duplicating the default behavior.

Modified:
cfe/trunk/lib/CodeGen/TargetInfo.cpp

Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=247623=247622=247623=diff
==
--- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Mon Sep 14 16:54:32 2015
@@ -624,7 +624,6 @@ ABIArgInfo WebAssemblyABIInfo::classifyA
 // though watch out for things like bitfields.
 if (const Type *SeltTy = isSingleElementStruct(Ty, getContext()))
   return ABIArgInfo::getDirect(CGT.ConvertType(QualType(SeltTy, 0)));
-return getNaturalAlignIndirect(Ty);
   }
 
   // Otherwise just do the default thing.


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r247624 - [WebAssembly] Define the atomic type sizes

2015-09-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Sep 14 16:56:37 2015
New Revision: 247624

URL: http://llvm.org/viewvc/llvm-project?rev=247624=rev
Log:
[WebAssembly] Define the atomic type sizes

WebAssembly's spec has now been updated to specify some guarantees
about lock free atomic accesses. Update clang to match.

This also updates sig_atomic_t to be 64-bit on wasm64. WebAssembly
does not presently have asynchronous interrupts, but this change is
within the spirit of how they will work if they are added.

Differential Revision: http://reviews.llvm.org/D12862

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=247624=247623=247624=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Mon Sep 14 16:56:37 2015
@@ -6994,6 +6994,7 @@ public:
 LargeArrayMinWidth = 128;
 LargeArrayAlign = 128;
 SimdDefaultAlign = 128;
+SigAtomicType = SignedLong;
   }
 
 protected:
@@ -7096,8 +7097,7 @@ class WebAssembly32TargetInfo : public W
 public:
   explicit WebAssembly32TargetInfo(const llvm::Triple )
   : WebAssemblyTargetInfo(T) {
-// TODO: Set this to the correct value once the spec issues are resolved.
-MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 0;
+MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 32;
 DataLayoutString = "e-p:32:32-i64:64-n32:64-S128";
   }
 
@@ -7115,8 +7115,7 @@ public:
   : WebAssemblyTargetInfo(T) {
 LongAlign = LongWidth = 64;
 PointerAlign = PointerWidth = 64;
-// TODO: Set this to the correct value once the spec issues are resolved.
-MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 0;
+MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
 DataLayoutString = "e-p:64:64-i64:64-n32:64-S128";
   }
 

Modified: cfe/trunk/test/Preprocessor/init.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=247624=247623=247624=diff
==
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Mon Sep 14 16:56:37 2015
@@ -8472,17 +8472,17 @@
 // WEBASSEMBLY32-NEXT:#define __FLT_MIN_EXP__ (-125){{$}}
 // WEBASSEMBLY32-NEXT:#define __FLT_MIN__ 1.17549435e-38F{{$}}
 // WEBASSEMBLY32-NEXT:#define __FLT_RADIX__ 2{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_BOOL_LOCK_FREE 1{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 1{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 1{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR_LOCK_FREE 1{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_INT_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_BOOL_LOCK_FREE 2{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_CHAR_LOCK_FREE 2{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_INT_LOCK_FREE 2{{$}}
 // WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_LLONG_LOCK_FREE 1{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_LONG_LOCK_FREE 1{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_POINTER_LOCK_FREE 1{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_SHORT_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_LONG_LOCK_FREE 2{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_POINTER_LOCK_FREE 2{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_SHORT_LOCK_FREE 2{{$}}
 // WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1{{$}}
-// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2{{$}}
 // WEBASSEMBLY32-NEXT:#define __GNUC_MINOR__ {{.}}
 // WEBASSEMBLY32-NEXT:#define __GNUC_PATCHLEVEL__ {{.}}
 // WEBASSEMBLY32-NEXT:#define __GNUC_STDC_INLINE__ 1{{$}}
@@ -8586,7 +8586,7 @@
 // WEBASSEMBLY32-NOT:#define __REGISTER_PREFIX__
 // WEBASSEMBLY32-NEXT:#define __SCHAR_MAX__ 127{{$}}
 // WEBASSEMBLY32-NEXT:#define __SHRT_MAX__ 32767{{$}}
-// WEBASSEMBLY32-NEXT:#define __SIG_ATOMIC_MAX__ 2147483647{{$}}
+// WEBASSEMBLY32-NEXT:#define __SIG_ATOMIC_MAX__ 2147483647L{{$}}
 // WEBASSEMBLY32-NEXT:#define __SIG_ATOMIC_WIDTH__ 32{{$}}
 // WEBASSEMBLY32-NEXT:#define __SIZEOF_DOUBLE__ 8{{$}}
 // WEBASSEMBLY32-NEXT:#define __SIZEOF_FLOAT__ 4{{$}}
@@ -8788,17 +8788,17 @@
 // WEBASSEMBLY64-NEXT:#define __FLT_MIN_EXP__ (-125){{$}}
 // WEBASSEMBLY64-NEXT:#define __FLT_MIN__ 1.17549435e-38F{{$}}
 // WEBASSEMBLY64-NEXT:#define __FLT_RADIX__ 2{{$}}
-// WEBASSEMBLY64-NEXT:#define __GCC_ATOMIC_BOOL_LOCK_FREE 1{{$}}
-// WEBASSEMBLY64-NEXT:#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 1{{$}}
-// WEBASSEMBLY64-NEXT:#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 1{{$}}
-// WEBASSEMBLY64-NEXT:#define __GCC_ATOMIC_CHAR_LOCK_FREE 1{{$}}
-// WEBASSEMBLY64-NEXT:#define 

r247622 - [WebAssembly] Use "long long" for int_fast64_t and int_least64_t on wasm64

2015-09-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Sep 14 16:49:41 2015
New Revision: 247622

URL: http://llvm.org/viewvc/llvm-project?rev=247622=rev
Log:
[WebAssembly] Use "long long" for int_fast64_t and int_least64_t on wasm64

This makes int_fast64_t and int_least64_t the same type as int64_t, and
eliminates a difference between wasm32 and wasm64.

Differential Revision: http://reviews.llvm.org/D12861

Modified:
cfe/trunk/include/clang/Basic/TargetInfo.h
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/Preprocessor/init.c

Modified: cfe/trunk/include/clang/Basic/TargetInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=247622=247621=247622=diff
==
--- cfe/trunk/include/clang/Basic/TargetInfo.h (original)
+++ cfe/trunk/include/clang/Basic/TargetInfo.h Mon Sep 14 16:49:41 2015
@@ -255,10 +255,11 @@ public:
   unsigned getTypeWidth(IntType T) const;
 
   /// \brief Return integer type with specified width.
-  IntType getIntTypeByWidth(unsigned BitWidth, bool IsSigned) const;
+  virtual IntType getIntTypeByWidth(unsigned BitWidth, bool IsSigned) const;
 
   /// \brief Return the smallest integer type with at least the specified 
width.
-  IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const;
+  virtual IntType getLeastIntTypeByWidth(unsigned BitWidth,
+ bool IsSigned) const;
 
   /// \brief Return floating point type with specified width.
   RealType getRealTypeByWidth(unsigned BitWidth) const;

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=247622=247621=247622=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Mon Sep 14 16:49:41 2015
@@ -7069,6 +7069,19 @@ private:
   const char *getClobbers() const final { return ""; }
   bool isCLZForZeroUndef() const final { return false; }
   bool hasInt128Type() const final { return true; }
+  IntType getIntTypeByWidth(unsigned BitWidth,
+bool IsSigned) const final {
+// WebAssembly prefers long long for explicitly 64-bit integers.
+return BitWidth == 64 ? (IsSigned ? SignedLongLong : UnsignedLongLong)
+  : TargetInfo::getIntTypeByWidth(BitWidth, IsSigned);
+  }
+  IntType getLeastIntTypeByWidth(unsigned BitWidth,
+ bool IsSigned) const final {
+// WebAssembly uses long long for int_least64_t and int_fast64_t.
+return BitWidth == 64
+   ? (IsSigned ? SignedLongLong : UnsignedLongLong)
+   : TargetInfo::getLeastIntTypeByWidth(BitWidth, IsSigned);
+  }
 };
 
 const Builtin::Info WebAssemblyTargetInfo::BuiltinInfo[] = {

Modified: cfe/trunk/test/Preprocessor/init.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=247622=247621=247622=diff
==
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Mon Sep 14 16:49:41 2015
@@ -8845,10 +8845,10 @@
 // WEBASSEMBLY64-NEXT:#define __INT_FAST32_FMTi__ "i"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST32_MAX__ 2147483647{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST32_TYPE__ int{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTd__ "ld"{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTi__ "li"{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_FAST64_MAX__ 9223372036854775807L{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_FAST64_TYPE__ long int{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTd__ "lld"{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTi__ "lli"{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_FAST64_MAX__ 9223372036854775807LL{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_FAST64_TYPE__ long long int{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST8_FMTd__ "hhd"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST8_FMTi__ "hhi"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST8_MAX__ 127{{$}}
@@ -8861,10 +8861,10 @@
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_FMTi__ "i"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_MAX__ 2147483647{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_TYPE__ int{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTd__ "ld"{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTi__ "li"{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_MAX__ 9223372036854775807L{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_TYPE__ long int{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTd__ "lld"{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTi__ "lli"{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_MAX__ 9223372036854775807LL{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_TYPE__ long long int{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST8_FMTd__ "hhd"{{$}}
 // WEBASSEMBLY64-NEXT:#define 

[PATCH] D12861: [WebAssembly] Use "long long" for int_fast64_t and int_least64_t on wasm64

2015-09-14 Thread Dan Gohman via cfe-commits
sunfish created this revision.
sunfish added a reviewer: jfb.
sunfish added a subscriber: cfe-commits.
sunfish set the repository for this revision to rL LLVM.
Herald added subscribers: dschuff, jfb.

This makes int_fast64_t and int_least64_t the same type as int64_t, and 
eliminates a difference between wasm32 and wasm64.

Repository:
  rL LLVM

http://reviews.llvm.org/D12861

Files:
  include/clang/Basic/TargetInfo.h
  lib/Basic/Targets.cpp
  test/Preprocessor/init.c

Index: test/Preprocessor/init.c
===
--- test/Preprocessor/init.c
+++ test/Preprocessor/init.c
@@ -8845,10 +8845,10 @@
 // WEBASSEMBLY64-NEXT:#define __INT_FAST32_FMTi__ "i"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST32_MAX__ 2147483647{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST32_TYPE__ int{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTd__ "ld"{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTi__ "li"{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_FAST64_MAX__ 9223372036854775807L{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_FAST64_TYPE__ long int{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTd__ "lld"{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTi__ "lli"{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_FAST64_MAX__ 9223372036854775807LL{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_FAST64_TYPE__ long long int{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST8_FMTd__ "hhd"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST8_FMTi__ "hhi"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_FAST8_MAX__ 127{{$}}
@@ -8861,10 +8861,10 @@
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_FMTi__ "i"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_MAX__ 2147483647{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_TYPE__ int{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTd__ "ld"{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTi__ "li"{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_MAX__ 9223372036854775807L{{$}}
-// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_TYPE__ long int{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTd__ "lld"{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTi__ "lli"{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_MAX__ 9223372036854775807LL{{$}}
+// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_TYPE__ long long int{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST8_FMTd__ "hhd"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST8_FMTi__ "hhi"{{$}}
 // WEBASSEMBLY64-NEXT:#define __INT_LEAST8_MAX__ 127{{$}}
@@ -8989,12 +8989,12 @@
 // WEBASSEMBLY64-NEXT:#define __UINT_FAST32_FMTx__ "x"{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_FAST32_MAX__ 4294967295U{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_FAST32_TYPE__ unsigned int{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTX__ "lX"{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTo__ "lo"{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTu__ "lu"{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTx__ "lx"{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_MAX__ 18446744073709551615UL{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_TYPE__ long unsigned int{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTX__ "llX"{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTo__ "llo"{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTu__ "llu"{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTx__ "llx"{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_MAX__ 18446744073709551615ULL{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_TYPE__ long long unsigned int{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_FAST8_FMTX__ "hhX"{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_FAST8_FMTo__ "hho"{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_FAST8_FMTu__ "hhu"{{$}}
@@ -9013,12 +9013,12 @@
 // WEBASSEMBLY64-NEXT:#define __UINT_LEAST32_FMTx__ "x"{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_LEAST32_MAX__ 4294967295U{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_LEAST32_TYPE__ unsigned int{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTX__ "lX"{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTo__ "lo"{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTu__ "lu"{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTx__ "lx"{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_MAX__ 18446744073709551615UL{{$}}
-// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_TYPE__ long unsigned int{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTX__ "llX"{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTo__ "llo"{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTu__ "llu"{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTx__ "llx"{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_MAX__ 18446744073709551615ULL{{$}}
+// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_TYPE__ long long unsigned int{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_LEAST8_FMTX__ "hhX"{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_LEAST8_FMTo__ "hho"{{$}}
 // WEBASSEMBLY64-NEXT:#define __UINT_LEAST8_FMTu__ "hhu"{{$}}
Index: lib/Basic/Targets.cpp

r246814 - [WebAssembly] Initial WebAssembly support in clang

2015-09-03 Thread Dan Gohman via cfe-commits
Author: djg
Date: Thu Sep  3 17:51:53 2015
New Revision: 246814

URL: http://llvm.org/viewvc/llvm-project?rev=246814=rev
Log:
[WebAssembly] Initial WebAssembly support in clang

This implements basic support for compiling (though not yet assembling
or linking) for a WebAssembly target. Note that ABI details are not yet
finalized, and may change.

Differential Revision: http://reviews.llvm.org/D12002

Added:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
cfe/trunk/test/CodeGen/align-wasm.c
  - copied, changed from r244997, cfe/trunk/test/CodeGen/align-x68_64.c
cfe/trunk/test/CodeGen/builtins-wasm.c
cfe/trunk/test/CodeGen/wasm-arguments.c
cfe/trunk/test/CodeGen/wasm-regparm.c
cfe/trunk/test/CodeGenCXX/static-init-wasm.cpp
cfe/trunk/test/CodeGenCXX/wasm-args-returns.cpp
cfe/trunk/test/Driver/wasm32-unknown-unknown.cpp
cfe/trunk/test/Driver/wasm64-unknown-unknown.cpp
cfe/trunk/test/Preprocessor/wasm-target-features.c
Modified:
cfe/trunk/include/clang/Basic/TargetBuiltins.h
cfe/trunk/include/clang/Basic/TargetCXXABI.h
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/include/clang/module.modulemap
cfe/trunk/lib/AST/ASTContext.cpp
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.h
cfe/trunk/lib/CodeGen/CodeGenModule.cpp
cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
cfe/trunk/lib/CodeGen/TargetInfo.cpp
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/lib/Driver/ToolChain.cpp
cfe/trunk/lib/Driver/ToolChains.cpp
cfe/trunk/lib/Driver/ToolChains.h
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/CodeGen/target-data.c
cfe/trunk/test/CodeGenCXX/constructor-destructor-return-this.cpp
cfe/trunk/test/CodeGenCXX/member-alignment.cpp
cfe/trunk/test/CodeGenCXX/member-function-pointers.cpp
cfe/trunk/test/Driver/thread-model.c
cfe/trunk/test/Preprocessor/init.c

Added: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=246814=auto
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (added)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Thu Sep  3 17:51:53 
2015
@@ -0,0 +1,21 @@
+// BuiltinsWebAssembly.def - WebAssembly builtin function database -*- C++ 
-*-//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===--===//
+///
+/// \file
+/// \brief This file defines the WebAssembly-specific builtin function 
database.
+/// Users of this file must define the BUILTIN macro to make use of this
+/// information.
+///
+//===--===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+BUILTIN(__builtin_wasm_page_size, "z", "nc")
+
+#undef BUILTIN

Modified: cfe/trunk/include/clang/Basic/TargetBuiltins.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetBuiltins.h?rev=246814=246813=246814=diff
==
--- cfe/trunk/include/clang/Basic/TargetBuiltins.h (original)
+++ cfe/trunk/include/clang/Basic/TargetBuiltins.h Thu Sep  3 17:51:53 2015
@@ -185,6 +185,17 @@ namespace clang {
 LastTSBuiltin
 };
   }
+
+  /// \brief WebAssembly builtins
+  namespace WebAssembly {
+enum {
+  LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsWebAssembly.def"
+  LastTSBuiltin
+};
+  }
+
 } // end namespace clang.
 
 #endif

Modified: cfe/trunk/include/clang/Basic/TargetCXXABI.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetCXXABI.h?rev=246814=246813=246814=diff
==
--- cfe/trunk/include/clang/Basic/TargetCXXABI.h (original)
+++ cfe/trunk/include/clang/Basic/TargetCXXABI.h Thu Sep  3 17:51:53 2015
@@ -85,6 +85,21 @@ public:
 ///   - representation of member function pointers adjusted as in ARM.
 GenericMIPS,
 
+/// The WebAssembly ABI is a modified version of the Itanium ABI.
+///
+/// The changes from the Itanium ABI are:
+///   - representation of member function pointers is adjusted, as in ARM;
+///   - member functions are not specially aligned;
+///   - constructors and destructors return 'this', as in ARM;
+///   - guard variables are 32-bit on wasm32, as in ARM;
+///   - unused bits of guard variables are reserved, as in ARM;
+///   - inline functions are never key functions, as in ARM;
+///   - C++11 POD rules are used for tail padding, as 

Re: [PATCH] D12002: Initial WebAssembly support in clang

2015-09-03 Thread Dan Gohman via cfe-commits
sunfishcode added inline comments.


Comment at: lib/Basic/Targets.cpp:7643-7649
@@ +7642,9 @@
+  case llvm::Triple::wasm64:
+// Until specific variations are defined, don't permit any.
+if (!(Triple == llvm::Triple("wasm64-unknown-unknown")) ||
+(!Triple.getVendorName().empty() &&
+ Triple.getVendorName() != "unknown") ||
+(!Triple.getOSName().empty() && Triple.getOSName() != "unknown") ||
+(Triple.hasEnvironment() && Triple.getEnvironmentName() != "unknown"))
+  return nullptr;
+return new WebAssemblyOSTargetInfo(Triple);

echristo wrote:
> sunfishcode wrote:
> > echristo wrote:
> > > Ditto.
> > > 
> > > (I said this just below, but it seems to have gotten munged in the newer 
> > > version)
> > I actually did see your comment and updated the code accordingly. It now 
> > does a positive test, `Triple == llvm::Triple("wasm64-unknown-unknown")`, 
> > which is simpler than what it did before.
> > 
> > However, it's also doing additional tests, because the Triple class's 
> > operator== doesn't distinguish between an Unknown that was actually 
> > "unknown" or an unknown that was some other string. Until we figure out 
> > what "vendor", "OS", and "environment" variations of wasm make sense (if 
> > any), we want to avoid dealing with accidental alternate triples.
> I think this is a lot of overkill here, no other target cares about this so 
> why should the wasm target? If it's that important maybe fix Triple?
This Triple issue is not important enough to hold up the rest of the patch for, 
so I just removed it. Thanks for the review!


Repository:
  rL LLVM

http://reviews.llvm.org/D12002



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D12002: Initial WebAssembly support in clang

2015-08-31 Thread Dan Gohman via cfe-commits
sunfish updated this revision to Diff 33611.
sunfish marked 2 inline comments as done.
sunfish added a comment.
Herald added a subscriber: dschuff.

Minor updates to keep the patch building and working as code changes around it. 
Also enabled -mthread-model.


Repository:
  rL LLVM

http://reviews.llvm.org/D12002

Files:
  include/clang/Basic/BuiltinsWebAssembly.def
  include/clang/Basic/TargetBuiltins.h
  include/clang/Basic/TargetCXXABI.h
  include/clang/Driver/Options.td
  include/clang/module.modulemap
  lib/AST/ASTContext.cpp
  lib/Basic/Targets.cpp
  lib/CodeGen/CGBuiltin.cpp
  lib/CodeGen/CodeGenFunction.h
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/ItaniumCXXABI.cpp
  lib/CodeGen/TargetInfo.cpp
  lib/Driver/Driver.cpp
  lib/Driver/ToolChain.cpp
  lib/Driver/ToolChains.cpp
  lib/Driver/ToolChains.h
  lib/Driver/Tools.cpp
  test/CodeGen/align-wasm.c
  test/CodeGen/builtins-wasm.c
  test/CodeGen/target-data.c
  test/CodeGen/wasm-arguments.c
  test/CodeGen/wasm-regparm.c
  test/CodeGenCXX/constructor-destructor-return-this.cpp
  test/CodeGenCXX/member-alignment.cpp
  test/CodeGenCXX/member-function-pointers.cpp
  test/CodeGenCXX/static-init-wasm.cpp
  test/CodeGenCXX/wasm-args-returns.cpp
  test/Driver/thread-model.c
  test/Driver/wasm32-unknown-unknown.cpp
  test/Driver/wasm64-unknown-unknown.cpp
  test/Preprocessor/init.c
  test/Preprocessor/wasm-target-features.c

Index: test/Preprocessor/wasm-target-features.c
===
--- test/Preprocessor/wasm-target-features.c
+++ test/Preprocessor/wasm-target-features.c
@@ -0,0 +1,35 @@
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -msimd128 \
+// RUN:   | FileCheck %s -check-prefix=SIMD128
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -msimd128 \
+// RUN:   | FileCheck %s -check-prefix=SIMD128
+//
+// SIMD128:#define __wasm_simd128__ 1{{$}}
+//
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -mcpu=mvp \
+// RUN:   | FileCheck %s -check-prefix=MVP
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -mcpu=mvp \
+// RUN:   | FileCheck %s -check-prefix=MVP
+//
+// MVP-NOT:#define __wasm_simd128__
+//
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -mcpu=bleeding-edge \
+// RUN:   | FileCheck %s -check-prefix=BLEEDING_EDGE
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -mcpu=bleeding-edge \
+// RUN:   | FileCheck %s -check-prefix=BLEEDING_EDGE
+//
+// BLEEDING_EDGE:#define __wasm_simd128__ 1{{$}}
+//
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -mcpu=bleeding-edge -mno-simd128 \
+// RUN:   | FileCheck %s -check-prefix=BLEEDING_EDGE_NO_SIMD128
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -mcpu=bleeding-edge -mno-simd128 \
+// RUN:   | FileCheck %s -check-prefix=BLEEDING_EDGE_NO_SIMD128
+//
+// BLEEDING_EDGE_NO_SIMD128-NOT:#define __wasm_simd128__
Index: test/Preprocessor/init.c
===
--- test/Preprocessor/init.c
+++ test/Preprocessor/init.c
@@ -8419,3 +8419,635 @@
 // XCORE:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
 // XCORE:#define __LITTLE_ENDIAN__ 1
 // XCORE:#define __XS1B__ 1
+//
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-unknown \
+// RUN:   < /dev/null \
+// RUN:   | FileCheck -check-prefix=WEBASSEMBLY32 %s
+//
+// WEBASSEMBLY32:#define _ILP32 1{{$}}
+// WEBASSEMBLY32-NOT:#define _LP64
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_ACQUIRE 2{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_ACQ_REL 4{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_CONSUME 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_RELAXED 0{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_RELEASE 3{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_SEQ_CST 5{{$}}
+// WEBASSEMBLY32-NEXT:#define __BIGGEST_ALIGNMENT__ 16{{$}}
+// WEBASSEMBLY32-NEXT:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__{{$}}
+// WEBASSEMBLY32-NEXT:#define __CHAR16_TYPE__ unsigned short{{$}}
+// WEBASSEMBLY32-NEXT:#define __CHAR32_TYPE__ unsigned int{{$}}
+// WEBASSEMBLY32-NEXT:#define __CHAR_BIT__ 8{{$}}
+// WEBASSEMBLY32-NOT:#define __CHAR_UNSIGNED__
+// WEBASSEMBLY32-NEXT:#define __CONSTANT_CFSTRINGS__ 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_DECIMAL_DIG__ 17{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_DENORM_MIN__ 4.9406564584124654e-324{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_DIG__ 15{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_EPSILON__ 2.2204460492503131e-16{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_HAS_DENORM__ 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_HAS_INFINITY__ 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_HAS_QUIET_NAN__ 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_MANT_DIG__ 53{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_MAX_10_EXP__ 308{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_MAX_EXP__ 1024{{$}}
+// 

Re: [PATCH] D12002: Initial WebAssembly support in clang

2015-08-31 Thread Dan Gohman via cfe-commits
sunfish updated this revision to Diff 33637.
sunfish added a comment.

Updated to address review comments:

- added comments
- simplified Triple validation code
- removed -mcpu="native" code


Repository:
  rL LLVM

http://reviews.llvm.org/D12002

Files:
  include/clang/Basic/BuiltinsWebAssembly.def
  include/clang/Basic/TargetBuiltins.h
  include/clang/Basic/TargetCXXABI.h
  include/clang/Driver/Options.td
  include/clang/module.modulemap
  lib/AST/ASTContext.cpp
  lib/Basic/Targets.cpp
  lib/CodeGen/CGBuiltin.cpp
  lib/CodeGen/CodeGenFunction.h
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/ItaniumCXXABI.cpp
  lib/CodeGen/TargetInfo.cpp
  lib/Driver/Driver.cpp
  lib/Driver/ToolChain.cpp
  lib/Driver/ToolChains.cpp
  lib/Driver/ToolChains.h
  lib/Driver/Tools.cpp
  test/CodeGen/align-wasm.c
  test/CodeGen/builtins-wasm.c
  test/CodeGen/target-data.c
  test/CodeGen/wasm-arguments.c
  test/CodeGen/wasm-regparm.c
  test/CodeGenCXX/constructor-destructor-return-this.cpp
  test/CodeGenCXX/member-alignment.cpp
  test/CodeGenCXX/member-function-pointers.cpp
  test/CodeGenCXX/static-init-wasm.cpp
  test/CodeGenCXX/wasm-args-returns.cpp
  test/Driver/thread-model.c
  test/Driver/wasm32-unknown-unknown.cpp
  test/Driver/wasm64-unknown-unknown.cpp
  test/Preprocessor/init.c
  test/Preprocessor/wasm-target-features.c

Index: test/Preprocessor/wasm-target-features.c
===
--- test/Preprocessor/wasm-target-features.c
+++ test/Preprocessor/wasm-target-features.c
@@ -0,0 +1,35 @@
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -msimd128 \
+// RUN:   | FileCheck %s -check-prefix=SIMD128
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -msimd128 \
+// RUN:   | FileCheck %s -check-prefix=SIMD128
+//
+// SIMD128:#define __wasm_simd128__ 1{{$}}
+//
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -mcpu=mvp \
+// RUN:   | FileCheck %s -check-prefix=MVP
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -mcpu=mvp \
+// RUN:   | FileCheck %s -check-prefix=MVP
+//
+// MVP-NOT:#define __wasm_simd128__
+//
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -mcpu=bleeding-edge \
+// RUN:   | FileCheck %s -check-prefix=BLEEDING_EDGE
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -mcpu=bleeding-edge \
+// RUN:   | FileCheck %s -check-prefix=BLEEDING_EDGE
+//
+// BLEEDING_EDGE:#define __wasm_simd128__ 1{{$}}
+//
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -mcpu=bleeding-edge -mno-simd128 \
+// RUN:   | FileCheck %s -check-prefix=BLEEDING_EDGE_NO_SIMD128
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -mcpu=bleeding-edge -mno-simd128 \
+// RUN:   | FileCheck %s -check-prefix=BLEEDING_EDGE_NO_SIMD128
+//
+// BLEEDING_EDGE_NO_SIMD128-NOT:#define __wasm_simd128__
Index: test/Preprocessor/init.c
===
--- test/Preprocessor/init.c
+++ test/Preprocessor/init.c
@@ -8419,3 +8419,635 @@
 // XCORE:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
 // XCORE:#define __LITTLE_ENDIAN__ 1
 // XCORE:#define __XS1B__ 1
+//
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-unknown \
+// RUN:   < /dev/null \
+// RUN:   | FileCheck -check-prefix=WEBASSEMBLY32 %s
+//
+// WEBASSEMBLY32:#define _ILP32 1{{$}}
+// WEBASSEMBLY32-NOT:#define _LP64
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_ACQUIRE 2{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_ACQ_REL 4{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_CONSUME 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_RELAXED 0{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_RELEASE 3{{$}}
+// WEBASSEMBLY32-NEXT:#define __ATOMIC_SEQ_CST 5{{$}}
+// WEBASSEMBLY32-NEXT:#define __BIGGEST_ALIGNMENT__ 16{{$}}
+// WEBASSEMBLY32-NEXT:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__{{$}}
+// WEBASSEMBLY32-NEXT:#define __CHAR16_TYPE__ unsigned short{{$}}
+// WEBASSEMBLY32-NEXT:#define __CHAR32_TYPE__ unsigned int{{$}}
+// WEBASSEMBLY32-NEXT:#define __CHAR_BIT__ 8{{$}}
+// WEBASSEMBLY32-NOT:#define __CHAR_UNSIGNED__
+// WEBASSEMBLY32-NEXT:#define __CONSTANT_CFSTRINGS__ 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_DECIMAL_DIG__ 17{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_DENORM_MIN__ 4.9406564584124654e-324{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_DIG__ 15{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_EPSILON__ 2.2204460492503131e-16{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_HAS_DENORM__ 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_HAS_INFINITY__ 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_HAS_QUIET_NAN__ 1{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_MANT_DIG__ 53{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_MAX_10_EXP__ 308{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_MAX_EXP__ 1024{{$}}
+// WEBASSEMBLY32-NEXT:#define __DBL_MAX__ 1.7976931348623157e+308{{$}}
+// 

Re: [PATCH] D12002: Initial WebAssembly support in clang

2015-08-20 Thread Dan Gohman via cfe-commits
sunfish marked 2 inline comments as done.


Comment at: lib/CodeGen/ItaniumCXXABI.cpp:364
@@ +363,3 @@
+ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
+  /* UseARMGuardVarABI = */ true) {}
+

jfb wrote:
 It's more common to have no spaces for these comments: 
 `/*UseARMMethodPtrABI=*/true,`.
Ok. I updated this in my local patch.


Comment at: lib/Driver/Tools.cpp:1567
@@ +1566,3 @@
+
+#ifdef __wasm__
+// Handle native by examining the host.

jfb wrote:
 Could you expand a bit on why native doesn't make sense if LLVM itself 
 wasn't compiled for wasm?
Ok. I added a comment to my local patch that says: native isn't meaningful 
when cross compiling, so only support this when the host is also WebAssembly.


Repository:
  rL LLVM

http://reviews.llvm.org/D12002



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D12002: Initial WebAssembly support in clang

2015-08-14 Thread Dan Gohman via cfe-commits
sunfish updated this revision to Diff 32192.
sunfish marked an inline comment as done.
sunfish added a comment.

- set MaxAtomicInlineWidth to 0 for now (sets *_ATOMIC_*_LOCK_FREE to 1)
- enable LargeArrayAlign
- enable __int128
- various cleanups


Repository:
  rL LLVM

http://reviews.llvm.org/D12002

Files:
  include/clang/Basic/BuiltinsWebAssembly.def
  include/clang/Basic/TargetBuiltins.h
  include/clang/Basic/TargetCXXABI.h
  include/clang/module.modulemap
  lib/AST/ASTContext.cpp
  lib/Basic/Targets.cpp
  lib/CodeGen/CGBuiltin.cpp
  lib/CodeGen/CodeGenFunction.h
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/ItaniumCXXABI.cpp
  lib/CodeGen/TargetInfo.cpp
  lib/Driver/Driver.cpp
  lib/Driver/ToolChains.cpp
  lib/Driver/ToolChains.h
  lib/Driver/Tools.cpp
  test/CodeGen/align-wasm.c
  test/CodeGen/builtins-wasm.c
  test/CodeGen/target-data.c
  test/CodeGen/wasm-arguments.c
  test/CodeGen/wasm-regparm.c
  test/CodeGenCXX/member-alignment.cpp
  test/CodeGenCXX/member-function-pointers.cpp
  test/CodeGenCXX/static-init-wasm.cpp
  test/Driver/wasm32-unknown-unknown.cpp
  test/Driver/wasm64-unknown-unknown.cpp
  test/Preprocessor/init.c

Index: test/Preprocessor/init.c
===
--- test/Preprocessor/init.c
+++ test/Preprocessor/init.c
@@ -8419,3 +8419,607 @@
 // XCORE:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
 // XCORE:#define __LITTLE_ENDIAN__ 1
 // XCORE:#define __XS1B__ 1
+//
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-unknown  /dev/null | FileCheck -check-prefix=WEBASSEMBLY32 %s
+//
+// WEBASSEMBLY32:#define _ILP32 1{{$}}
+// WEBASSEMBLY32-NOT:#define _LP64
+// WEBASSEMBLY32:#define __ATOMIC_ACQUIRE 2{{$}}
+// WEBASSEMBLY32:#define __ATOMIC_ACQ_REL 4{{$}}
+// WEBASSEMBLY32:#define __ATOMIC_CONSUME 1{{$}}
+// WEBASSEMBLY32:#define __ATOMIC_RELAXED 0{{$}}
+// WEBASSEMBLY32:#define __ATOMIC_RELEASE 3{{$}}
+// WEBASSEMBLY32:#define __ATOMIC_SEQ_CST 5{{$}}
+// WEBASSEMBLY32:#define __BIGGEST_ALIGNMENT__ 16{{$}}
+// WEBASSEMBLY32:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__{{$}}
+// WEBASSEMBLY32:#define __CHAR16_TYPE__ unsigned short{{$}}
+// WEBASSEMBLY32:#define __CHAR32_TYPE__ unsigned int{{$}}
+// WEBASSEMBLY32:#define __CHAR_BIT__ 8{{$}}
+// WEBASSEMBLY32:#define __CONSTANT_CFSTRINGS__ 1{{$}}
+// WEBASSEMBLY32:#define __DBL_DECIMAL_DIG__ 17{{$}}
+// WEBASSEMBLY32:#define __DBL_DENORM_MIN__ 4.9406564584124654e-324{{$}}
+// WEBASSEMBLY32:#define __DBL_DIG__ 15{{$}}
+// WEBASSEMBLY32:#define __DBL_EPSILON__ 2.2204460492503131e-16{{$}}
+// WEBASSEMBLY32:#define __DBL_HAS_DENORM__ 1{{$}}
+// WEBASSEMBLY32:#define __DBL_HAS_INFINITY__ 1{{$}}
+// WEBASSEMBLY32:#define __DBL_HAS_QUIET_NAN__ 1{{$}}
+// WEBASSEMBLY32:#define __DBL_MANT_DIG__ 53{{$}}
+// WEBASSEMBLY32:#define __DBL_MAX_10_EXP__ 308{{$}}
+// WEBASSEMBLY32:#define __DBL_MAX_EXP__ 1024{{$}}
+// WEBASSEMBLY32:#define __DBL_MAX__ 1.7976931348623157e+308{{$}}
+// WEBASSEMBLY32:#define __DBL_MIN_10_EXP__ (-307){{$}}
+// WEBASSEMBLY32:#define __DBL_MIN_EXP__ (-1021){{$}}
+// WEBASSEMBLY32:#define __DBL_MIN__ 2.2250738585072014e-308{{$}}
+// WEBASSEMBLY32:#define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__{{$}}
+// WEBASSEMBLY32:#define __FINITE_MATH_ONLY__ 0{{$}}
+// WEBASSEMBLY32:#define __FLT_DECIMAL_DIG__ 9{{$}}
+// WEBASSEMBLY32:#define __FLT_DENORM_MIN__ 1.40129846e-45F{{$}}
+// WEBASSEMBLY32:#define __FLT_DIG__ 6{{$}}
+// WEBASSEMBLY32:#define __FLT_EPSILON__ 1.19209290e-7F{{$}}
+// WEBASSEMBLY32:#define __FLT_EVAL_METHOD__ 0{{$}}
+// WEBASSEMBLY32:#define __FLT_HAS_DENORM__ 1{{$}}
+// WEBASSEMBLY32:#define __FLT_HAS_INFINITY__ 1{{$}}
+// WEBASSEMBLY32:#define __FLT_HAS_QUIET_NAN__ 1{{$}}
+// WEBASSEMBLY32:#define __FLT_MANT_DIG__ 24{{$}}
+// WEBASSEMBLY32:#define __FLT_MAX_10_EXP__ 38{{$}}
+// WEBASSEMBLY32:#define __FLT_MAX_EXP__ 128{{$}}
+// WEBASSEMBLY32:#define __FLT_MAX__ 3.40282347e+38F{{$}}
+// WEBASSEMBLY32:#define __FLT_MIN_10_EXP__ (-37){{$}}
+// WEBASSEMBLY32:#define __FLT_MIN_EXP__ (-125){{$}}
+// WEBASSEMBLY32:#define __FLT_MIN__ 1.17549435e-38F{{$}}
+// WEBASSEMBLY32:#define __FLT_RADIX__ 2{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_BOOL_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_CHAR_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_INT_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_LLONG_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_LONG_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_POINTER_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_SHORT_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GNUC_MINOR__
+// WEBASSEMBLY32:#define __GNUC_PATCHLEVEL__
+// WEBASSEMBLY32:#define __GNUC_STDC_INLINE__ 1{{$}}
+// WEBASSEMBLY32:#define __GNUC__
+// 

Re: [PATCH] D12002: Initial WebAssembly support in clang

2015-08-14 Thread Dan Gohman via cfe-commits
sunfish added inline comments.


Comment at: lib/Basic/Targets.cpp:7010
@@ +7009,3 @@
+  { #ID, TYPE, ATTRS, HEADER, ALL_LANGUAGES, nullptr },
+#include clang/Basic/BuiltinsWebAssembly.def
+};

WebAssembly32TargetInfo is subclassed in LLVM code, and getTargetDefines is 
overridden.


Comment at: test/Preprocessor/init.c:8478
@@ +8477,3 @@
+// WEBASSEMBLY32:#define __GCC_ATOMIC_LONG_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_POINTER_LOCK_FREE 1{{$}}
+// WEBASSEMBLY32:#define __GCC_ATOMIC_SHORT_LOCK_FREE 1{{$}}

Ok, I've set MaxAtomicInlineWidth to 0 for now so that we don't block the rest 
of the patch on this issue.

N4509 is just about exposing the same information via a different interface.


Repository:
  rL LLVM

http://reviews.llvm.org/D12002



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D12002: Initial WebAssembly support in clang

2015-08-13 Thread Dan Gohman via cfe-commits
sunfish marked 2 inline comments as done.


Comment at: lib/Basic/Targets.cpp:6935
@@ +6934,3 @@
+
+public:
+  explicit WebAssemblyTargetInfo(const llvm::Triple T) : TargetInfo(T) {

I've now removed this (for now; we can discuss what to do in a later patch).


Repository:
  rL LLVM

http://reviews.llvm.org/D12002



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D12002: Initial WebAssembly support in clang

2015-08-12 Thread Dan Gohman via cfe-commits
sunfish updated this revision to Diff 32025.
sunfish marked 3 inline comments as done.
sunfish added a comment.

Minor changes to address review comments.


Repository:
  rL LLVM

http://reviews.llvm.org/D12002

Files:
  include/clang/Basic/BuiltinsWebAssembly.def
  include/clang/Basic/TargetBuiltins.h
  include/clang/Basic/TargetCXXABI.h
  include/clang/module.modulemap
  lib/AST/ASTContext.cpp
  lib/Basic/Targets.cpp
  lib/CodeGen/CGBuiltin.cpp
  lib/CodeGen/CodeGenFunction.h
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/ItaniumCXXABI.cpp
  lib/CodeGen/TargetInfo.cpp
  lib/Driver/ToolChains.h
  lib/Driver/Tools.cpp
  test/CodeGen/builtins-wasm.c
  test/CodeGen/target-data.c
  test/CodeGen/wasm-arguments.c
  test/CodeGen/wasm-regparm.c
  test/CodeGenCXX/member-alignment.cpp
  test/CodeGenCXX/member-function-pointers.cpp
  test/CodeGenCXX/static-init-wasm.cpp
  test/Driver/wasm32-unknown-unknown.cpp
  test/Driver/wasm64-unknown-unknown.cpp
  test/Preprocessor/init.c

Index: test/Preprocessor/init.c
===
--- test/Preprocessor/init.c
+++ test/Preprocessor/init.c
@@ -8418,3 +8418,601 @@
 // XCORE:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
 // XCORE:#define __LITTLE_ENDIAN__ 1
 // XCORE:#define __XS1B__ 1
+//
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-unknown  /dev/null | FileCheck -check-prefix=WEBASSEMBLY32 %s
+//
+// WEBASSEMBLY32:#define _ILP32 1
+// WEBASSEMBLY32-NOT:#define _LP64
+// WEBASSEMBLY32:#define __ATOMIC_ACQUIRE 2
+// WEBASSEMBLY32:#define __ATOMIC_ACQ_REL 4
+// WEBASSEMBLY32:#define __ATOMIC_CONSUME 1
+// WEBASSEMBLY32:#define __ATOMIC_RELAXED 0
+// WEBASSEMBLY32:#define __ATOMIC_RELEASE 3
+// WEBASSEMBLY32:#define __ATOMIC_SEQ_CST 5
+// WEBASSEMBLY32:#define __BIGGEST_ALIGNMENT__ 16
+// WEBASSEMBLY32:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
+// WEBASSEMBLY32:#define __CHAR16_TYPE__ unsigned short
+// WEBASSEMBLY32:#define __CHAR32_TYPE__ unsigned int
+// WEBASSEMBLY32:#define __CHAR_BIT__ 8
+// WEBASSEMBLY32:#define __CONSTANT_CFSTRINGS__ 1
+// WEBASSEMBLY32:#define __DBL_DECIMAL_DIG__ 17
+// WEBASSEMBLY32:#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
+// WEBASSEMBLY32:#define __DBL_DIG__ 15
+// WEBASSEMBLY32:#define __DBL_EPSILON__ 2.2204460492503131e-16
+// WEBASSEMBLY32:#define __DBL_HAS_DENORM__ 1
+// WEBASSEMBLY32:#define __DBL_HAS_INFINITY__ 1
+// WEBASSEMBLY32:#define __DBL_HAS_QUIET_NAN__ 1
+// WEBASSEMBLY32:#define __DBL_MANT_DIG__ 53
+// WEBASSEMBLY32:#define __DBL_MAX_10_EXP__ 308
+// WEBASSEMBLY32:#define __DBL_MAX_EXP__ 1024
+// WEBASSEMBLY32:#define __DBL_MAX__ 1.7976931348623157e+308
+// WEBASSEMBLY32:#define __DBL_MIN_10_EXP__ (-307)
+// WEBASSEMBLY32:#define __DBL_MIN_EXP__ (-1021)
+// WEBASSEMBLY32:#define __DBL_MIN__ 2.2250738585072014e-308
+// WEBASSEMBLY32:#define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__
+// WEBASSEMBLY32:#define __FINITE_MATH_ONLY__ 0
+// WEBASSEMBLY32:#define __FLT_DECIMAL_DIG__ 9
+// WEBASSEMBLY32:#define __FLT_DENORM_MIN__ 1.40129846e-45F
+// WEBASSEMBLY32:#define __FLT_DIG__ 6
+// WEBASSEMBLY32:#define __FLT_EPSILON__ 1.19209290e-7F
+// WEBASSEMBLY32:#define __FLT_EVAL_METHOD__ 0
+// WEBASSEMBLY32:#define __FLT_HAS_DENORM__ 1
+// WEBASSEMBLY32:#define __FLT_HAS_INFINITY__ 1
+// WEBASSEMBLY32:#define __FLT_HAS_QUIET_NAN__ 1
+// WEBASSEMBLY32:#define __FLT_MANT_DIG__ 24
+// WEBASSEMBLY32:#define __FLT_MAX_10_EXP__ 38
+// WEBASSEMBLY32:#define __FLT_MAX_EXP__ 128
+// WEBASSEMBLY32:#define __FLT_MAX__ 3.40282347e+38F
+// WEBASSEMBLY32:#define __FLT_MIN_10_EXP__ (-37)
+// WEBASSEMBLY32:#define __FLT_MIN_EXP__ (-125)
+// WEBASSEMBLY32:#define __FLT_MIN__ 1.17549435e-38F
+// WEBASSEMBLY32:#define __FLT_RADIX__ 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_INT_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_LLONG_LOCK_FREE 1
+// WEBASSEMBLY32:#define __GCC_ATOMIC_LONG_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
+// WEBASSEMBLY32:#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
+// WEBASSEMBLY32:#define __GNUC_MINOR__
+// WEBASSEMBLY32:#define __GNUC_PATCHLEVEL__
+// WEBASSEMBLY32:#define __GNUC_STDC_INLINE__ 1
+// WEBASSEMBLY32:#define __GNUC__
+// WEBASSEMBLY32:#define __GXX_ABI_VERSION 1002
+// WEBASSEMBLY32:#define __GXX_RTTI 1
+// WEBASSEMBLY32:#define __ILP32__ 1
+// WEBASSEMBLY32:#define __INT16_C_SUFFIX__ {{$}}
+// WEBASSEMBLY32:#define __INT16_FMTd__ hd
+// WEBASSEMBLY32:#define __INT16_FMTi__ hi
+// WEBASSEMBLY32:#define __INT16_MAX__ 32767
+// WEBASSEMBLY32:#define __INT16_TYPE__ short
+// WEBASSEMBLY32:#define __INT32_C_SUFFIX__ {{$}}
+// WEBASSEMBLY32:#define __INT32_FMTd__ d
+//