[patch, fortran] Inline MATMUL(TRANSPOSE(A),B) for rank 1 B.
Thomas Koenig <[email protected]> Sat, 1 Aug 2026 10:48:53 +0200
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------Aud9SWUb2RfnEoHrMhi3okg9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hello world, what it says in the ChangeLog. Regression-tested. OK for trunk? Best regards Thomas Inline MATMUL(TRANSPOSE(A),B) for rank 1 B. This patch implements inlining MATMUL(TRANSPOSE(A),B). For ordering of the loops, this is an unpleasant problem because of the dependence of c(i) on the previous iteration, but gcc was able to fully unroll the loops at least for small sizes, and the version in the patch generated better code. gcc/fortran/ChangeLog: * frontend-passes.cc (enum matrix_case): Add case A2TB1. (matmul_lhs_realloc): Add condition for reallocation and size checks. (inline_matmul_assign): Handle A2TB1. gcc/testsuite/ChangeLog: * gfortran.dg/inline_matmul_29.f90: New test. --------------Aud9SWUb2RfnEoHrMhi3okg9 Content-Type: text/x-patch; charset=UTF-8; name="p-a2tb1.diff" Content-Disposition: attachment; filename="p-a2tb1.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2Zyb250ZW5kLXBhc3Nlcy5jYyBiL2djYy9mb3J0 cmFuL2Zyb250ZW5kLXBhc3Nlcy5jYwppbmRleCA3MGU4ZWM5ZTE2MS4uYzAzY2QwOTNiYjQg MTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2Zyb250ZW5kLXBhc3Nlcy5jYworKysgYi9nY2Mv Zm9ydHJhbi9mcm9udGVuZC1wYXNzZXMuY2MKQEAgLTEzMyw3ICsxMzMsNyBAQCBzdGF0aWMg aW50IHZhcl9udW0gPSAxOwogCiAvKiBXaGF0IHNvcnQgb2YgbWF0cml4IHdlIGFyZSBkZWFs aW5nIHdpdGggd2hlbiBpbmxpbmluZyBNQVRNVUwuICAqLwogCi1lbnVtIG1hdHJpeF9jYXNl IHsgbm9uZT0wLCBBMkIyLCBBMkIxLCBBMUIyLCBBMkIyVCwgQTJUQjIsIEEyVEIyVCB9Owor ZW51bSBtYXRyaXhfY2FzZSB7IG5vbmU9MCwgQTJCMiwgQTJCMSwgQTFCMiwgQTJCMlQsIEEy VEIyLCBBMlRCMlQsIEEyVEIxIH07CiAKIC8qIEtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBv ZiBleHByZXNzaW9ucyB3ZSBoYXZlIGluc2VydGVkIHNvIGZhcgogICAgdXNpbmcgY3JlYXRl X3Zhci4gICovCkBAIC0zNTY5LDYgKzM1NjksMTMgQEAgbWF0bXVsX2xoc19yZWFsbG9jIChn ZmNfZXhwciAqYywgZ2ZjX2V4cHIgKmEsIGdmY19leHByICpiLAogCQkJCSBnZXRfYXJyYXlf aW5xX2Z1bmN0aW9uIChHRkNfSVNZTV9TSVpFLCBhLCAxKSk7CiAgICAgICBicmVhazsKIAor ICAgIGNhc2UgQTJUQjE6CisgICAgICBhci0+c3RhcnRbMF0gPSBnZXRfYXJyYXlfaW5xX2Z1 bmN0aW9uIChHRkNfSVNZTV9TSVpFLCBhLCAyKTsKKyAgICAgIGNvbmQgPSBidWlsZF9sb2dp Y2FsX2V4cHIgKElOVFJJTlNJQ19ORSwKKwkJCQkgZ2V0X2FycmF5X2lucV9mdW5jdGlvbiAo R0ZDX0lTWU1fU0laRSwgYywgMSksCisJCQkJIGdldF9hcnJheV9pbnFfZnVuY3Rpb24gKEdG Q19JU1lNX1NJWkUsIGEsIDIpKTsKKyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBBMUIyOgog ICAgICAgYXItPnN0YXJ0WzBdID0gZ2V0X2FycmF5X2lucV9mdW5jdGlvbiAoR0ZDX0lTWU1f U0laRSwgYiwgMik7CiAgICAgICBjb25kID0gYnVpbGRfbG9naWNhbF9leHByIChJTlRSSU5T SUNfTkUsCkBAIC00MjE5LDYgKzQyMjYsOCBAQCBpbmxpbmVfbWF0bXVsX2Fzc2lnbiAoZ2Zj X2NvZGUgKipjLCBpbnQgKndhbGtfc3VidHJlZXMsCiAJewogCSAgaWYgKG1hdHJpeF9iLT5y YW5rID09IDIgJiYgIXRyYW5zcG9zZV9iKQogCSAgICBtX2Nhc2UgPSBBMlRCMjsKKwkgIGVs c2UgaWYgKG1hdHJpeF9iLT5yYW5rID09IDEpCisJICAgIG1fY2FzZSA9IEEyVEIxOwogCX0K ICAgICAgIGVsc2UKIAl7CkBAIC00MzczLDYgKzQzODIsMjMgQEAgaW5saW5lX21hdG11bF9h c3NpZ24gKGdmY19jb2RlICoqYywgaW50ICp3YWxrX3N1YnRyZWVzLAogCSAgICB9CiAJICBi cmVhazsKIAorCWNhc2UgQTJUQjE6CisJICBiMSA9IGdldF9hcnJheV9pbnFfZnVuY3Rpb24g KEdGQ19JU1lNX1NJWkUsIG1hdHJpeF9iLCAxKTsKKwkgIGExID0gZ2V0X2FycmF5X2lucV9m dW5jdGlvbiAoR0ZDX0lTWU1fU0laRSwgbWF0cml4X2EsIDEpOworCSAgdGVzdCA9IHJ1bnRp bWVfZXJyb3JfbmUgKGIxLCBhMSwgQl9FUlJPUl8xKTsKKwkgICpuZXh0X2NvZGVfcG9pbnQg PSB0ZXN0OworCSAgbmV4dF9jb2RlX3BvaW50ID0gJnRlc3QtPm5leHQ7CisKKwkgIGlmICgh cmVhbGxvY19jKQorCSAgICB7CisJICAgICAgYzEgPSBnZXRfYXJyYXlfaW5xX2Z1bmN0aW9u IChHRkNfSVNZTV9TSVpFLCBleHByMSwgMSk7CisJICAgICAgYTIgPSBnZXRfYXJyYXlfaW5x X2Z1bmN0aW9uIChHRkNfSVNZTV9TSVpFLCBtYXRyaXhfYSwgMik7CisJICAgICAgdGVzdCA9 IHJ1bnRpbWVfZXJyb3JfbmUgKGMxLCBhMiwgQ19FUlJPUl8xKTsKKwkgICAgICAqbmV4dF9j b2RlX3BvaW50ID0gdGVzdDsKKwkgICAgICBuZXh0X2NvZGVfcG9pbnQgPSAmdGVzdC0+bmV4 dDsKKwkgICAgfQorCSAgYnJlYWs7CisKIAljYXNlIEExQjI6CiAKIAkgIGIxID0gZ2V0X2Fy cmF5X2lucV9mdW5jdGlvbiAoR0ZDX0lTWU1fU0laRSwgbWF0cml4X2IsIDEpOwpAQCAtNDYx Niw2ICs0NjQyLDQwIEBAIGlubGluZV9tYXRtdWxfYXNzaWduIChnZmNfY29kZSAqKmMsIGlu dCAqd2Fsa19zdWJ0cmVlcywKIAogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEEyVEIxOgor CisgICAgICAvKiBPcmRlcmluZyBoZXJlIGlzCisJICAgZG8gaT0xLHNpemUoYSwyKQorCSAg ICAgZG8gaj0xLHNpemUoYiwxKQorCSAgICAgICBjKGkpID0gYyhpKSArIGEoaixpKSAqIGIo aikKKwkgICAgIGVuZCBkbworCSAgIGVuZCBkbworICAgICAgd2hlcmUgaSBpcyB2YXJfMSBh bmQgaiBpcyB2YXJfMi4gICovCisKKyAgICAgIHUxID0gZ2V0X3NpemVfbTEgKG1hdHJpeF9h LCAyKTsKKyAgICAgIHUyID0gZ2V0X3NpemVfbTEgKG1hdHJpeF9iLCAxKTsKKworICAgICAg ZG9fMSA9IGNyZWF0ZV9kb19sb29wIChnZmNfY29weV9leHByICh6ZXJvKSwgdTEsIE5VTEws ICZjby0+bG9jLCBucyk7CisgICAgICBkb18yID0gY3JlYXRlX2RvX2xvb3AgKGdmY19jb3B5 X2V4cHIgKHplcm8pLCB1MiwgTlVMTCwgJmNvLT5sb2MsIG5zKTsKKworICAgICAgZG9fMS0+ YmxvY2stPm5leHQgPSBkb18yOworICAgICAgZG9fMi0+YmxvY2stPm5leHQgPSBhc3NpZ25f bWF0bXVsOworCisgICAgICB2YXJfMSA9IGRvXzEtPmV4dC5pdGVyYXRvci0+dmFyOworICAg ICAgdmFyXzIgPSBkb18yLT5leHQuaXRlcmF0b3ItPnZhcjsKKworICAgICAgbGlzdFswXSA9 IHZhcl8xOworICAgICAgY3NjYWxhciA9IHNjYWxhcml6ZWRfZXhwciAoY28tPmV4cHIxLCBs aXN0LCAxKTsKKworICAgICAgbGlzdFswXSA9IHZhcl8yOworICAgICAgbGlzdFsxXSA9IHZh cl8xOworICAgICAgYXNjYWxhciA9IHNjYWxhcml6ZWRfZXhwciAobWF0cml4X2EsIGxpc3Qs IDIpOworCisgICAgICBsaXN0WzBdID0gdmFyXzI7CisgICAgICBic2NhbGFyID0gc2NhbGFy aXplZF9leHByIChtYXRyaXhfYiwgbGlzdCwgMSk7CisKKyAgICAgIGJyZWFrOworCiAgICAg Y2FzZSBBMUIyOgogICAgICAgdTEgPSBnZXRfc2l6ZV9tMSAobWF0cml4X2IsIDIpOwogICAg ICAgdTIgPSBnZXRfc2l6ZV9tMSAobWF0cml4X2EsIDEpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9pbmxpbmVfbWF0bXVsXzI5LmY5MCBiL2djYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvaW5saW5lX21hdG11bF8yOS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkzNzJhMDUyNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9pbmxpbmVfbWF0bXVsXzI5LmY5MApAQCAtMCww ICsxLDI4IEBACishIHsgZGctZG8gcnVuIH0KKyEgeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1mZnJvbnRlbmQtb3B0aW1pemUgLWZkdW1wLXRyZWUtb3JpZ2luYWwiIH0KKworUFJPR1JB TSBtZW1haW4KKyAgaW1wbGljaXQgbm9uZQorICBSRUFMKDgpLCBESU1FTlNJT04oMykgOjog YgorICBSRUFMKDgpLCBESU1FTlNJT04oMywyKSA6OiBBCisgIHJlYWwoOCksIGRpbWVuc2lv big6KSwgYWxsb2NhdGFibGUgOjogeQorICByZWFsKDgpLCBkaW1lbnNpb24oMikgOjogegor ICBpbnRlZ2VyIDo6IGksIGoKKworICBBKDosMSkgPSBbMSwtMiwzXQorICBBKDosMikgPSBb LTQsNSw2XQorICAgIAorICBiID0gIFs3LC04LDldCisgIHkgPSBtYXRtdWwodHJhbnNwb3Nl KEEpLGIpCisgIHogPSAwCisgIGRvIGk9MSwyCisgICAgZG8gaj0xLDMKKyAgICAgICB6KGkp ID0geihpKSArIGEoaixpKSAqIGIoaikKKyAgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAo c2l6ZSh6LDEpIC89IHNpemUoeSwxKSkgc3RvcCAxCisgIGlmIChhbnkoYWJzKHogLSB5KSA+ IDFlLTEyKSkgc3RvcCAyCisgICAgCitFTkQgUFJPR1JBTSBtZW1haW4KKyEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiX2dmb3J0cmFuX21hdG11bF9yOCIgIm9yaWdpbmFs IiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiX2dmb3J0cmFuX3Ry YW5zcG9zZV9yOCIgIm9yaWdpbmFsIiB9IH0K --------------Aud9SWUb2RfnEoHrMhi3okg9--