clementval added a comment. @pengfei We are also hitting the following assertion with this patch. Do you have any idea why?
/llvm-project/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:4333: void {anonymous}::SelectionDAGLegalize::ConvertNodeToLibcall(llvm::SDNode*): Assertion `cast<ConstantSDNode>(Node->getOperand(IsStrict ? 2 : 1))->isZero() && "Unable to expand as libcall if it is not normal rounding"' failed. LLVM IR triggering the assertion. ; ModuleID = 'FIRModule' source_filename = "FIRModule" target triple = "x86_64-unknown-linux-gnu" @_QMhp237Ea11 = global half 0xH3D00 @_QMhp237Eb1a = global half 0xH5640 @_QMf90_kindECascii = external constant i32 @_QMf90_kindECbyte = external constant i32 @_QMf90_kindECdouble = external constant i32 @_QMiso_fortran_envECint16 = external constant i32 @_QMiso_fortran_envECint32 = external constant i32 @_QMiso_fortran_envECint64 = external constant i32 @_QMiso_fortran_envECint8 = external constant i32 @_QMf90_kindECjis = external constant i32 @_QMiso_fortran_envEClogical16 = external constant i32 @_QMiso_fortran_envEClogical32 = external constant i32 @_QMiso_fortran_envEClogical64 = external constant i32 @_QMiso_fortran_envEClogical8 = external constant i32 @_QMf90_kindECnot_available = external constant i32 @_QMf90_kindECquad = external constant i32 @_QMiso_fortran_envECreal128 = external constant i32 @_QMf90_kindECreal16 = external constant i32 @_QMiso_fortran_envECreal32 = external constant i32 @_QMiso_fortran_envECreal64 = external constant i32 @_QMf90_kindECreal64x2 = external constant i32 @_QMf90_kindECsingle = external constant i32 @_QMf90_kindECtwobyte = external constant i32 @_QMf90_kindECucs2 = external constant i32 @_QMf90_kindECucs4 = external constant i32 @_QMf90_kindECword = external constant i32 @_QQcl.2E2F627567312E66393000 = linkonce constant [11 x i8] c"./bug1.f90\00" @_QQcl.2831362C313629 = linkonce constant [7 x i8] c"(16,16)" @_QQcl.28346631302E3329 = linkonce constant [8 x i8] c"(4f10.3)" declare ptr @malloc(i64) declare void @free(ptr) define void @_QQmain() !dbg !3 { %1 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8, !dbg !7 %2 = alloca half, i64 1, align 2, !dbg !9 %3 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr @_QQcl.2E2F627567312E66393000, i32 9), !dbg !10 %4 = call i1 @_FortranAioOutputAscii(ptr %3, ptr @_QQcl.2831362C313629, i64 7), !dbg !11 %5 = call i32 @_FortranAioEndIoStatement(ptr %3), !dbg !12 %6 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr @_QQcl.28346631302E3329, i64 8, i32 -1, ptr @_QQcl.2E2F627567312E66393000, i32 10), !dbg !13 %7 = load half, ptr @_QMhp237Ea11, align 2, !dbg !14 %8 = load half, ptr @_QMhp237Eb1a, align 2, !dbg !15 %9 = fpext half %7 to float, !dbg !16 %10 = fpext half %8 to float, !dbg !17 %11 = call float @llvm.copysign.f32(float %9, float %10), !dbg !18 %12 = fptrunc float %11 to half, !dbg !19 store half %12, ptr %2, align 2, !dbg !20 %13 = insertvalue { ptr, i64, i32, i8, i8, i8, i8 } { ptr undef, i64 2, i32 20180515, i8 0, i8 25, i8 0, i8 0 }, ptr %2, 0, !dbg !7 store { ptr, i64, i32, i8, i8, i8, i8 } %13, ptr %1, align 8, !dbg !7 %14 = call i1 @_FortranAioOutputDescriptor(ptr %6, ptr %1), !dbg !21 %15 = call i32 @_FortranAioEndIoStatement(ptr %6), !dbg !22 ret void, !dbg !23 } declare ptr @_FortranAioBeginExternalListOutput(i32, ptr, i32) declare i1 @_FortranAioOutputAscii(ptr, ptr, i64) declare i32 @_FortranAioEndIoStatement(ptr) declare ptr @_FortranAioBeginExternalFormattedOutput(ptr, i64, i32, ptr, i32) declare i1 @_FortranAioOutputDescriptor(ptr, ptr) ; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn declare float @llvm.copysign.f32(float, float) #0 attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn } !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!2} !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "mlir", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug) !1 = !DIFile(filename: "FIRModule", directory: "/") !2 = !{i32 2, !"Debug Info Version", i32 3} !3 = distinct !DISubprogram(name: "_QQmain", linkageName: "_QQmain", scope: null, file: !4, line: 9, type: !5, scopeLine: 9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !6) !4 = !DIFile(filename: "<stdin>", directory: "/local/home/vclement/llvm-project/build") !5 = !DISubroutineType(types: !6) !6 = !{} !7 = !DILocation(line: 39, column: 9, scope: !8) !8 = !DILexicalBlockFile(scope: !3, file: !4, discriminator: 0) !9 = !DILocation(line: 10, column: 8, scope: !8) !10 = !DILocation(line: 17, column: 8, scope: !8) !11 = !DILocation(line: 22, column: 8, scope: !8) !12 = !DILocation(line: 23, column: 9, scope: !8) !13 = !DILocation(line: 31, column: 9, scope: !8) !14 = !DILocation(line: 32, column: 9, scope: !8) !15 = !DILocation(line: 33, column: 9, scope: !8) !16 = !DILocation(line: 34, column: 9, scope: !8) !17 = !DILocation(line: 35, column: 9, scope: !8) !18 = !DILocation(line: 36, column: 9, scope: !8) !19 = !DILocation(line: 37, column: 9, scope: !8) !20 = !DILocation(line: 38, column: 3, scope: !8) !21 = !DILocation(line: 41, column: 9, scope: !8) !22 = !DILocation(line: 42, column: 9, scope: !8) !23 = !DILocation(line: 43, column: 3, scope: !8) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D107082/new/ https://reviews.llvm.org/D107082 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits