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

    <tr>
        <th>Summary</th>
        <td>
            [flang] Don't generate mul constant expressions
        </td>
    </tr>

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

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

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

<pre>
    Flang currently generates mul constant expressions:
```
[npopov@fedora llvm-project]$ git grep "mul (" flang
flang/test/Fir/alloc.fir:// CHECK: call ptr @malloc(i64 mul (i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64), i64 100))
flang/test/Fir/alloc.fir:// CHECK: %[[mul2:.*]] = mul i64 mul (i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64), i64 9), %[[mul1]]
flang/test/Fir/alloc.fir:// CHECK: %[[prod2:.*]] = mul i64 mul (i64 ptrtoint (ptr getelementptr (i16, ptr null, i32 1) to i64), i64 3), %[[prod1]]
flang/test/Fir/alloc.fir:// CHECK: %[[a:.*]] = mul i64 mul (i64 ptrtoint{{.*}} 15), %[[e1]]
flang/test/Fir/alloc.fir:// CHECK: %[[mul:.*]] = mul i64 mul (i64 ptrtoint (ptr getelementptr ([3 x [10 x i16]], ptr null, i32 1) to i64), i64 4), %[[e]]
flang/test/Fir/alloc.fir:// CHECK: %[[a:.*]] = mul i64 mul (i64 ptrtoint (ptr getelementptr (i16, ptr null, i32 1) to i64), i64 12), %[[len]]
flang/test/Fir/box.fir:  // CHECK: insertvalue { ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] } %{{.*}}, i64 mul (i64 ptrtoint (ptr getelementptr (float, ptr null, i32 1) to i64), i64 200), 7, 0, 2
flang/test/Fir/box.fir:  // CHECK: insertvalue { ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] } %{{.*}}, i64 mul (i64 ptrtoint (ptr getelementptr (float, ptr null, i32 1) to i64), i64 30000), 7, 1, 2
flang/test/Fir/embox.fir:// CHECK: [i64 1, i64 5, i64 mul (i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64), i64 2)]] }, ptr %[[a3]], 0
flang/test/Fir/embox.fir:  // CHECK: insertvalue {[[descriptorType:.*]]} { ptr undef, i64 mul (i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64), i64 2), i32 20180515, i8 2, i8 40, i8 0, i8 0
```
Support for these will be dropped imminently.

The root problem is that you're generating sizeof constant expressions. You should stop doing that and directly produce sizes according to the used DataLayout. Possibly you just forgot to pass down the DataLayout somewhere?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVk2P6yYU_TVkc9UIX9uxs8giGdeq1C4q9W26JObG4RWDBXhm0l9fgT2TvnlTzUcjdVMpwhBxL-ccLnCE96o3RDtWHljZrMQUztbtjPpDdaujlZddq4XpoZucIxP0BXoy5EQgD8OkobPGB2EC0OPoyHtljWf5nvGG8T3b8OU3D8uDGe1o71nBTyStE6D1_fDD6OxX6gIrG4YF9CpA72gEhhhXYFgzRDhFGHOeuYttIB8Ytq1yDFuhte3WJ-Xi6tgybOHupx_vfmb5HjqhNYzBASv4kCYyrNWmgCV_7I7BBatMiOM4tadAmgYyIQVirXJkeJfSmEnr2Fc5QsZwC8GC2hQMt-nfTQEZ52m0_SRihmXakMMwaWT5fs1wH_UpG2B5k3B_GH_9fvjbpf93GNm8_r8lNDorb8Uo27yfUv6SUgRyI07iQ3xYdWDVIc2vGlY1kJUvsdGNgA2Tvo3UrDzk8AisPGQcHiEqPwN8t_7Fdxz_C-1vU0sZviSjybxJ52gfFzIAL-ko48mFe6EnAlYdIo5lsQVJ-tSvt6w84Lw5cY9izKJF1SSEL-rticVH5DlpK8L7BcLl-ruDKjY8Nvi_NOke4vxbcbK3xKHhKs93x6A8pIJ8yl5-hsGHXrZU-s8iPsVdj2N-vRj4O0m9uedzakm-c2oM1n25jPTNsU_bOdcGTEbS6VMyfOCBfLoA4gzkWc3LbJa-hqUeoeBL5_p9zRT9No2jdQFO1kE4kyd4UFrDkUA6O44kQQ2DMsl7rZcMqf1yJnDWBhidPWoaQHkIZxHgYieGlaMnp6ZMD179Sfb0qltbw-92An-2k5bggx1B2hiScgkjQSpHXXR-8cWcOkrJPIius06mmTYih8mThEYE8Yu42Cms4VfrvTrqS0QEXyefSPY2xIBReA_SPpgUeo0Cbwd6OJMjlrcrucvlNt-KFe2yzXabl1iU9eq8q4_HsjoVHHOZnbIM67rrsKPNVvJKynq7UjvkmGcZrzKOvKzXGXZVgWW9KU-YS0RWcBqE0uvoQNfW9Svl_US7Kit5tdLiSNonT4w412--76ykngxDjEbZ7ZJ3PU69ZwXXygd_zRVU0MlSz7FlA401DKvw7J7_0TyvJqd35xBG_3zcexXO03Hd2YFhG9dYPs_GGdsE3jNsE_6_AgAA___5H2ek">