This is a patch to X86TargetLowering::LowerToBT() which was hashed over on the Developers list with Intel concurring.

It checks whether the -Oz (optimize for size) flag is set or whether the containing function’s PGO cold attribute is set. If either are true it emits BT for tests of bits 8-31 instead of TEST. Previously, TEST was always used for bits 0-31 and BT was always used for bits 32-63.

Since the BT instruction is 16b smaller than TEST for the bits 8-31 case, 32b vs 48b, and not irredeemably slower, it makes sense to use BT in cases where size matters.

Similar logic is possible for BTC and BTS. However, LowerToBTC and LowerToBTS would need to be written and used and that’s a larger patch.

pat (1.28 KB)

tst64.c (1.54 KB)

Can you transform you C file into a LLVM IR lit test?

See example in test/CodeGen/X86/*.ll



tst64.ll is attached from clang -S -emit-llvm tst64.c

tst64.ll (15.8 KB)

Sorry, I didn't see "lit" until the second reading. I'm reading the lit

Is this right? I just prepended this to the -emit-llvm output:

; RUN: llc < %s -march=x86 | FileCheck %s

tst64.ll (44.2 KB)