Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vj1HJ-003xJO-1E for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Jan 2026 20:27:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vj1HI-00EdEx-1Y for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Jan 2026 20:27:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vj1HH-00EdEm-39 for pgsql-hackers@lists.postgresql.org; Thu, 22 Jan 2026 20:27:40 +0000 Received: from mail-244117.protonmail.ch ([109.224.244.117]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vj1HF-0000000011L-37Vy for pgsql-hackers@lists.postgresql.org; Thu, 22 Jan 2026 20:27:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pinaraf.info; s=protonmail; t=1769113655; x=1769372855; bh=NwmOe6E0BTvY4qM1PBZ6nqVvHCZi1TXaDVZjmgWEClg=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=Bpd4mb9LkmXZ+b/VWjAY303wKOYKoekgF9OCkXbO7LZuDaChCI26nwBOGQSXFT1UF NqzQuOEuQSC6LOwIf9CotcC4JsCy53adnyxhW1ntQe/0dArPbzfIn2vTzTm13C69K+ QY8N6QGTdcnb49wv/usmyq/peO2qo9pN9DcVMG4m0Atv/84qoJhaIWdhFc+cCWJNPw Mx1COCJ+ck2LX6ezNnAtGZhe1Ddw8hudkZbs+XJu9opEIrcPJ+evdc2Y3kMH46jWgU eNcccaZfodq5rt1R5BhLruVD/sS4JFKHP2CiT+6r/rxZ+8fEKDi0yWaDKab3KEtNiz 8lE/jdPAx9elA== Date: Thu, 22 Jan 2026 20:27:29 +0000 To: Matheus Alcantara From: Pierre Ducroquet Cc: "pgsql-hackers@lists.postgresql.org" Subject: Re: [PATCH] llvmjit: always add the simplifycfg pass Message-ID: In-Reply-To: References: Feedback-ID: 175348558:user:proton X-Pm-Message-ID: bd0b147cb7892e0ddfd3a35e2e72d8dc55083779 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_RvMGphGiEgIeoIoPzSieNhdqlBF6o9CQMea4nmXpBxU" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b1=_RvMGphGiEgIeoIoPzSieNhdqlBF6o9CQMea4nmXpBxU Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Le jeudi 22 janvier 2026 =C3=A0 8:54 PM, Matheus Alcantara a =C3=A9crit=C2=A0: > Hi, >=20 > On 07/01/26 12:08, Pierre Ducroquet wrote: >=20 > > Hi > >=20 > > While reading the code generated by llvmjit, I realized the number of L= LVM basic blocks used in tuple deforming was directly visible in the genera= ted assembly code with the following code: > > 0x723382b781c1: jmp 0x723382b781c3 > > 0x723382b781c3: jmp 0x723382b781eb > > 0x723382b781c5: mov -0x20(%rsp),%rax > > 0x723382b781..: ... ..... > > 0x723382b781e7: mov %cx,(%rax) > > 0x723382b781ea: ret > > 0x723382b781eb: jmp 0x723382b781ed > > 0x723382b781ed: jmp 0x723382b781ef > > 0x723382b781ef: jmp 0x723382b781f1 > > 0x723382b781f1: jmp 0x723382b781f3 > > 0x723382b781f3: mov -0x30(%rsp),%rax > > 0x723382b781..: ... ...... > > 0x723382b78208: mov %rcx,(%rax) > > 0x723382b7820b: jmp 0x723382b781c5 > > That's a lot of useless jumps, and LLVM has a specific pass to get rid = of these. The attached patch modifies the llvmjit code to always call this = pass, even below jit_optimize_above_cost. > >=20 > > On a basic benchmark (a simple select * from table where f =3D 42), thi= s optimization saved 7ms of runtime while using only 0.1 ms of extra optimi= zation time. >=20 >=20 > The patch needs a rebase due to e5d99b4d9ef. >=20 > You've added the "simplifycfg" only when the "jit_optimize_above_cost" > is not triggered which will use the default and mem2reg passes, the >=20 > default pass already include "simplifycfg"? >=20 >=20 > With e5d99b4d9ef being committed, should we add "simplifycfg" when > PGJIT_INLINE bit is set since it also use the default and mem2reg >=20 > passes? Hi Thank you, here is a rebased version of the patch. To answer your questions: - O3 already includes simplifycfg, so no need to modify O3 - any code generated by our llvmjit provider, esp. tuple deforming, is heav= ily dependent on simplifycfg, so when O0 is the basis we should always add = this pass --b1=_RvMGphGiEgIeoIoPzSieNhdqlBF6o9CQMea4nmXpBxU Content-Type: text/x-patch; name=0001-llvmjit-always-use-the-simplifycfg-pass.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-llvmjit-always-use-the-simplifycfg-pass.patch RnJvbSBjYjVjYjc0NDYxYWM5NDA3YzE2OTAzYmZhOWQyODU1ZjRlNzY5MThlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgRHVjcm9xdWV0IDxwaW5hcmFmQHBpbmFyYWYuaW5m bz4KRGF0ZTogV2VkLCA3IEphbiAyMDI2IDE1OjQzOjE5ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g bGx2bWppdDogYWx3YXlzIHVzZSB0aGUgc2ltcGxpZnljZmcgcGFzcwoKVGhlIHNpbXBsaWZ5Y2Zn IHBhc3Mgd2lsbCByZW1vdmUgZW1wdHkgb3IgdW5yZWFjaGFibGUgTExWTSBiYXNpYyBibG9ja3Ms CmFuZCBtZXJnZSBibG9ja3MgdG9nZXRoZXIgd2hlbiBwb3NzaWJsZS4KVGhpcyBpcyBpbXBvcnRh bnQgYmVjYXVzZSB0aGUgdHVwbGUgIGRlZm9ybWluZyBjb2RlIHdpbGwgZ2VuZXJhdGUgYSBsb3Qg b2YKYmFzaWMgYmxvY2tzLCBhbmQgcHJldmlvdXNseSB3aXRoIE8wIHdlIGRpZCBub3QgcnVuIHRo aXMgcGFzcywgdGh1cyBjcmVhdGluZwp0aGlzIGtpbmQgb2YgKGFtZDY0KSBtYWNoaW5lIGNvZGU6 CiAgIDB4NzIzMzgyYjc4MWMxOiAgICAgIGptcCAgICAweDcyMzM4MmI3ODFjMwogICAweDcyMzM4 MmI3ODFjMzogICAgICBqbXAgICAgMHg3MjMzODJiNzgxZWIKICAgMHg3MjMzODJiNzgxYzU6ICAg ICAgbW92ICAgIC0weDIwKCVyc3ApLCVyYXgKICAgMHg3MjMzODJiNzgxLi46ICAgICAgLi4uICAg IC4uLi4uCiAgIDB4NzIzMzgyYjc4MWU3OiAgICAgIG1vdiAgICAlY3gsKCVyYXgpCiAgIDB4NzIz MzgyYjc4MWVhOiAgICAgIHJldAogICAweDcyMzM4MmI3ODFlYjogICAgICBqbXAgICAgMHg3MjMz ODJiNzgxZWQKICAgMHg3MjMzODJiNzgxZWQ6ICAgICAgam1wICAgIDB4NzIzMzgyYjc4MWVmCiAg IDB4NzIzMzgyYjc4MWVmOiAgICAgIGptcCAgICAweDcyMzM4MmI3ODFmMQogICAweDcyMzM4MmI3 ODFmMTogICAgICBqbXAgICAgMHg3MjMzODJiNzgxZjMKICAgMHg3MjMzODJiNzgxZjM6ICAgICAg bW92ICAgIC0weDMwKCVyc3ApLCVyYXgKICAgMHg3MjMzODJiNzgxLi46ICAgICAgLi4uICAgIC4u Li4uLgogICAweDcyMzM4MmI3ODIwODogICAgICBtb3YgICAgJXJjeCwoJXJheCkKICAgMHg3MjMz ODJiNzgyMGI6ICAgICAgam1wICAgIDB4NzIzMzgyYjc4MWM1CgpUaGlzIGlzIG5vdCBlZmZpY2ll bnQgYXQgYWxsLCBhbmQgdHJpZ2dlcmluZyB0aGUgc2ltcGxpZnljZmcgcGFzcyBlbmRzIHVwCnRh Y2tpbmcgYSBmZXcgaHVuZHJlZHMgbWljcm8gc2Vjb25kcyB3aGlsZSBwb3NzaWJseSBzYXZpbmcg bXVjaCBtb3JlIHRpbWUKZHVyaW5nIGV4ZWN1dGlvbi4gT24gYSBiYXNpYyBiZW5jaG1hcmssIEkg c2F2ZWQgN21zIG9uIHF1ZXJ5IHJ1bnRpbWUgd2hpbGUKdXNpbmcgMC4ybXMgb24gZXh0cmEgSklU IGNvbXBpbGF0aW9uIG92ZXJoZWFkCi0tLQogc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdC5j IHwgOSArKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdC5jIGIvc3Jj L2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdC5jCmluZGV4IDJlOGFhNDc0OWRiLi5jMjJmODNlOTdj ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdC5jCisrKyBiL3NyYy9i YWNrZW5kL2ppdC9sbHZtL2xsdm1qaXQuYwpAQCAtNjMzLDYgKzYzMywxMSBAQCBsbHZtX29wdGlt aXplX21vZHVsZShMTFZNSml0Q29udGV4dCAqY29udGV4dCwgTExWTU1vZHVsZVJlZiBtb2R1bGUp CiAJewogCQkvKiB3ZSByZWx5IG9uIG1lbTJyZWcgaGVhdmlseSwgc28gZW1pdCBldmVuIGluIHRo ZSBPMCBjYXNlICovCiAJCUxMVk1BZGRQcm9tb3RlTWVtb3J5VG9SZWdpc3RlclBhc3MobGx2bV9m cG0pOworCQkvKgorCQkgKiB0aGUgdHVwbGUgZGVmb3JtaW5nIGdlbmVyYXRlcyBhIGxvdCBvZiBi YXNpYyBibG9ja3MsCisJCSAqIHNpbXBsaWZ5IHRoZW0gZXZlbiB3aXRoIE8wCisJCSAqLworCQlM TFZNQWRkQ0ZHU2ltcGxpZmljYXRpb25QYXNzKGxsdm1fZnBtKTsKIAl9CiAKIAlMTFZNUGFzc01h bmFnZXJCdWlsZGVyUG9wdWxhdGVGdW5jdGlvblBhc3NNYW5hZ2VyKGxsdm1fcG1iLCBsbHZtX2Zw bSk7CkBAIC02NzYsMTAgKzY4MSwxMCBAQCBsbHZtX29wdGltaXplX21vZHVsZShMTFZNSml0Q29u dGV4dCAqY29udGV4dCwgTExWTU1vZHVsZVJlZiBtb2R1bGUpCiAJCXBhc3NlcyA9ICJkZWZhdWx0 PE8zPiI7CiAJZWxzZSBpZiAoY29udGV4dC0+YmFzZS5mbGFncyAmIFBHSklUX0lOTElORSkKIAkJ LyogaWYgZG9pbmcgaW5saW5pbmcsIGJ1dCBubyBleHBlbnNpdmUgb3B0aW1pemF0aW9uLCBhZGQg aW5saW5lIHBhc3MgKi8KLQkJcGFzc2VzID0gImRlZmF1bHQ8TzA+LG1lbTJyZWcsaW5saW5lIjsK KwkJcGFzc2VzID0gImRlZmF1bHQ8TzA+LG1lbTJyZWcsc2ltcGxpZnljZmcsaW5saW5lIjsKIAll bHNlCiAJCS8qIGRlZmF1bHQ8TzA+IGluY2x1ZGVzIGFsd2F5cy1pbmxpbmUgcGFzcyAqLwotCQlw YXNzZXMgPSAiZGVmYXVsdDxPMD4sbWVtMnJlZyI7CisJCXBhc3NlcyA9ICJkZWZhdWx0PE8wPixt ZW0ycmVnLHNpbXBsaWZ5Y2ZnIjsKIAogCW9wdGlvbnMgPSBMTFZNQ3JlYXRlUGFzc0J1aWxkZXJP cHRpb25zKCk7CiAKLS0gCjIuNDMuMAoK --b1=_RvMGphGiEgIeoIoPzSieNhdqlBF6o9CQMea4nmXpBxU--