<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57230>57230</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [flang] flang driver runs LLVM middle-end without setting DataLayout for the module
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang:driver
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          vzakhari
      </td>
    </tr>
</table>

<pre>
    Reproducer:
```
subroutine sub()
end subroutine sub
```

`flang-new -O1 -c test.f90 -mllvm -print-after-all -mllvm -print-before-all`:
```
*** IR Dump Before Annotation2MetadataPass on [module] ***
; ModuleID = 'FIRModule'
source_filename = "FIRModule"
target triple = "x86_64-unknown-linux-gnu"

declare ptr @malloc(i64)

declare void @free(ptr)

define void @sub_() !dbg !3 {
  ret void, !dbg !7
}

!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: "sub_", linkageName: "sub_", scope: null, file: !4, line: 1, type: !5, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !6)
!4 = !DIFile(filename: "./test.f90", directory: "/tmp")
!5 = !DISubroutineType(types: !6)
!6 = !{}
!7 = !DILocation(line: 2, column: 1, scope: !8)
!8 = !DILexicalBlockFile(scope: !3, file: !4, discriminator: 0)
```

Notice that there is no `target datalayout` defined for the module.  The data layout gets defined late in `CodeGenAction::executeAction()` so this setting only affects LLVM back-end, but LLVM middle-end also relies on the data layout, e.g. `DL` defines behavior of `InstCombine` optimization (see `llvm/lib/Transforms/InstCombine/InstructionCombining.cpp:InstCombinerImpl::shouldChangeType()`).

It looks like the data layout setting has to be moved to `flang/lib/Frontend/FrontendActions.cpp:CodeGenAction::generateLLVMIR()`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyFVttu2zgQ_Rr5hbCgiy_ygx-SGC6MddMiTbuPASWNZK4pUiCpNOnX7wwly0qa7gKGLc4cDmfOGQ2d6_J1-wCt0WVXgAnSmyDaBdFNsIqGj1_aLje6c0IBw8cgyYJk03tAleyd96MAo7GSXNVzBT_Z_EvM5gVzYF1YbSI2b6R8bti8NUK5Oa8cmDmX8p09h0obIAfF_kO6QTJ82OGB7bqmZbd-G7tRSjvuhFbJZ3C85I5_5dYyrViwvG2QBAnBcsfGAEO89JZ99s4D-lLyr_eHh96EzwNJujMFPFVCguINDMBkAkx6oOOmBsecEa0cYS_Z6mm1mHfqrPRPNZdCdS_zWnXjrv67hEJyrKR1hgWLqEEidIGCiNVi1OQt8lmLkqCVAUwhw42_ASuS7oJDCZ96hTGtuMxr-klZsL7t4YwZTJ7QQXI3gQwsBOvdG8mTmOQLERQW3VBsTMGSOLpiB1SvQIhNUtu32OT3uJFHlMJi5xWOoLvDnW5a5P-7Eg5roF7reA3YJ2z399Px5v7T0x1lTRqREffEtJ70P2nRSGGId_QI-6V1ohG_oCSnMx2Q2XQKrfADjMVmIk9EZmiEJcNfQnn4vpNyB3lXXynHEy-V7Q57yiPJLi0zHP-mYzBqKQwUTpvXwR8ke_99DZlMyBJpwpJBGoT549lBVZpdsh0qQ1w6VSD9gM9vXY7c1IY3mOYkxb5JfBzs1DNyfP-h0xa69WaFTLxjfjHs9msvg3ttL87luPs4Rdh2T73hBT18-0qLHbWvoHcae_RuNF9lw20d9UMf2OuEHcwxbHmvS7CDYzUldPF_GoUowmV0_Vkm17TvlFpeA38bx-Yj1Z1kVP6H2aym78JEsfU12FEXfq5R1w-E-aQKLbtGXfm76IGbsukR2SQUvIiCy1scLOeh-Om29CMZsWsKg3wrjgQMr8PmP26Ce-1EAcydOM7BE-CYEpYpzRA2TEeazZK_IkFoY_2MKhlOccKzYVAw9ogLgrIey3CrHdGSOwysKOodKv0J1E3h-vcVP_ACRedgMPV3Gh5lNZ6A2VhwqE2Nd4N8ZbyqUFvLjscfn1nOi_McLz4qPMczvbERZSmBzIxLjGFACvA3i3ubop8TYR1SVrvjtTjLcjjxZ4EV6oqcB2UdzrOc5ESU7hua952OmgAQiuYmdpoUeC3vHw1XFjlqLC6m-_uV6XytvRFrC4u2RSImQHNoWtnTY0-6k-XdCWfopUF7hvA7nGp5cExqfbb4Lp_hfbUjjSdumdNYI2r3jNo4L7b_OzCmvzdaOU_s-NirY4dMP1CxBswadSYRDg9jkuEMtvFqFWWLaJUls3Kblpt0w2dOOAlbvOz7k_Gu9w-sNOIZDM11-5ueP4U7TUvZYXnHvrq3_TjrjNyenGvpLfZTel_j3i4PC-1FGrTCH_w7o__BlsIlXhkdkGDLdZJGs9N2XZTrIoqiMo6SZZxFfB2VsKgwfyjizaaYSZ6DtFQFTpe-kPSmr4DGzXI3E9skSpIoi7N4lWZREkar9TrKqrxc5vF6Ea3xooeGCxn6e1ebema2Pi-8LSw6JV4D9urEP0miVuCZo_i8Q0rM9vkXP5-4ETNfw9YX8C_ZRxaH">