| --- a/core/iwasm/compilation/aot_llvm.c | |
| +++ b/core/iwasm/compilation/aot_llvm.c | |
| @@ -95,6 +95,21 @@ | |
| return NULL; | |
| } | |
| + /* Hard-float lowering emits llvm.experimental.constrained.* calls; | |
| + LangRef requires strictfp on any function containing them, or the | |
| + optimizer and ISel are free to assume default FP semantics and | |
| + miscompile (observed at opt-level >= 1 once mem2reg/sroa expose the | |
| + dataflow). */ | |
| + { | |
| + unsigned kind = LLVMGetEnumAttributeKindForName("strictfp", 8); | |
| + if (kind != 0) { | |
| + LLVMAddAttributeAtIndex( | |
| + func, (LLVMAttributeIndex)LLVMAttributeFunctionIndex, | |
| + LLVMCreateEnumAttribute(LLVMGetModuleContext(module), kind, | |
| + 0)); | |
| + } | |
| + } | |
| + | |
| j = 0; | |
| local_value = LLVMGetParam(func, j++); | |
| LLVMSetValueName(local_value, "exec_env"); |