[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--