[all-commits] [llvm/llvm-project] 89a4bc: [CIR] Split cir.binop into separate per-operation ...

Henrich Lauko via All-commits all-commits at lists.llvm.org
Tue Mar 3 13:34:39 PST 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 89a4bcf023493cb75aded5a70c082c1fa7d46cbc
      https://github.com/llvm/llvm-project/commit/89a4bcf023493cb75aded5a70c082c1fa7d46cbc
  Author: Henrich Lauko <xlauko at mail.muni.cz>
  Date:   2026-03-03 (Tue, 03 Mar 2026)

  Changed paths:
    M clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h
    M clang/include/clang/CIR/Dialect/IR/CIROps.td
    M clang/include/clang/CIR/Dialect/IR/CIRTypeConstraints.td
    M clang/include/clang/CIR/Interfaces/CIROpInterfaces.td
    M clang/lib/CIR/CodeGen/CIRGenBuilder.h
    M clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp
    M clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp
    M clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp
    M clang/lib/CIR/CodeGen/CIRGenOpenACCRecipe.cpp
    M clang/lib/CIR/Dialect/IR/CIRDialect.cpp
    M clang/lib/CIR/Dialect/Transforms/FlattenCFG.cpp
    M clang/lib/CIR/Dialect/Transforms/LoweringPrepare.cpp
    M clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp
    M clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
    M clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h
    M clang/test/CIR/CodeGen/assign-operator.cpp
    M clang/test/CIR/CodeGen/atomic.c
    M clang/test/CIR/CodeGen/basic.c
    M clang/test/CIR/CodeGen/basic.cpp
    M clang/test/CIR/CodeGen/binop.cpp
    M clang/test/CIR/CodeGen/bitfields.c
    M clang/test/CIR/CodeGen/complex-compound-assignment.cpp
    M clang/test/CIR/CodeGen/complex-mul-div.cpp
    M clang/test/CIR/CodeGen/complex.cpp
    M clang/test/CIR/CodeGen/compound_assign.cpp
    M clang/test/CIR/CodeGen/if.cpp
    M clang/test/CIR/CodeGen/integer-overflow.c
    M clang/test/CIR/CodeGen/lambda.cpp
    M clang/test/CIR/CodeGen/namespace.cpp
    M clang/test/CIR/CodeGen/new.cpp
    M clang/test/CIR/CodeGen/no-odr-use.cpp
    M clang/test/CIR/CodeGen/non-type-template-param.cpp
    M clang/test/CIR/CodeGen/opaque.cpp
    M clang/test/CIR/CodeGen/pointer-to-data-member-cast.cpp
    M clang/test/CIR/CodeGen/pointer-to-member-func-cast.cpp
    M clang/test/CIR/CodeGen/pointer-to-member-func-cmp.cpp
    M clang/test/CIR/CodeGen/pointer-to-member-func.cpp
    M clang/test/CIR/CodeGen/requires-expr.cpp
    M clang/test/CIR/CodeGen/size-of-vla.cpp
    M clang/test/CIR/CodeGen/struct-init.cpp
    M clang/test/CIR/CodeGen/switch_flat_op.cpp
    M clang/test/CIR/CodeGen/ternary.cpp
    M clang/test/CIR/CodeGen/throws.cpp
    M clang/test/CIR/CodeGen/try-catch.cpp
    M clang/test/CIR/CodeGen/variable-decomposition.cpp
    M clang/test/CIR/CodeGen/vector-ext-element.cpp
    M clang/test/CIR/CodeGen/vector-ext.cpp
    M clang/test/CIR/CodeGen/vector.cpp
    M clang/test/CIR/CodeGen/vla.c
    M clang/test/CIR/CodeGenBuiltins/AArch64/acle_sve_len.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx10_2_512bf16-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx10_2bf16-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx2-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx512bw-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx512dq-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx512f-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx512fp16-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx512vldq-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/cmp-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/sse2-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/sse41-builtins.c
    M clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp
    M clang/test/CIR/CodeGenOpenACC/atomic-update.cpp
    M clang/test/CIR/CodeGenOpenACC/atomic-write.cpp
    M clang/test/CIR/CodeGenOpenACC/combined-firstprivate-clause.cpp
    M clang/test/CIR/CodeGenOpenACC/combined-private-clause.cpp
    M clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-default-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-float.cpp
    M clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-inline-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-int.cpp
    M clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-outline-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/combined.cpp
    M clang/test/CIR/CodeGenOpenACC/compute-firstprivate-clause.cpp
    M clang/test/CIR/CodeGenOpenACC/compute-private-clause.cpp
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-default-ops.c
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-default-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-float.c
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-float.cpp
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-inline-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-int.c
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-int.cpp
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-outline-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-unsigned-int.c
    M clang/test/CIR/CodeGenOpenACC/firstprivate-clause-recipes.cpp
    M clang/test/CIR/CodeGenOpenACC/loop-private-clause.cpp
    M clang/test/CIR/CodeGenOpenACC/loop-reduction-clause-default-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/loop-reduction-clause-float.cpp
    M clang/test/CIR/CodeGenOpenACC/loop-reduction-clause-inline-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/loop-reduction-clause-int.cpp
    M clang/test/CIR/CodeGenOpenACC/loop-reduction-clause-outline-ops.cpp
    M clang/test/CIR/CodeGenOpenACC/loop.cpp
    M clang/test/CIR/CodeGenOpenACC/private-clause-array-recipes-CtorDtor.cpp
    M clang/test/CIR/CodeGenOpenACC/private-clause-pointer-array-recipes-CtorDtor.cpp
    M clang/test/CIR/CodeGenOpenACC/private-clause-pointer-array-recipes-NoOps.cpp
    M clang/test/CIR/CodeGenOpenACC/private-clause-pointer-array-recipes-int.cpp
    M clang/test/CIR/CodeGenOpenACC/private-clause-pointer-recipes-CtorDtor.cpp
    M clang/test/CIR/CodeGenOpenACC/private-clause-pointer-recipes-NoOps.cpp
    M clang/test/CIR/CodeGenOpenACC/private-clause-pointer-recipes-int.cpp
    M clang/test/CIR/CodeGenOpenACC/reduction-clause-recipes.cpp
    M clang/test/CIR/CodeGenOpenMP/omp-llvmir.c
    M clang/test/CIR/CodeGenOpenMP/parallel.c
    M clang/test/CIR/IR/throw.cir
    M clang/test/CIR/IR/vector.cir
    M clang/test/CIR/Lowering/binop-bool.cir
    M clang/test/CIR/Lowering/binop-fp.cir
    M clang/test/CIR/Lowering/binop-signed-int.cir
    M clang/test/CIR/Lowering/binop-unsigned-int.cir
    M clang/test/CIR/Transforms/switch.cir
    M clang/test/CodeGen/AArch64/neon/intrinsics.c

  Log Message:
  -----------
  [CIR] Split cir.binop into separate per-operation binary ops (#184227)

Replace the single `cir.binop` operation (dispatched via a `BinOpKind`
enum) with nine distinct ops — `cir.add`, `cir.sub`, `cir.mul`,
`cir.div`, `cir.rem`, `cir.and`, `cir.or`, `cir.xor`, and `cir.max` —
each with precise type constraints and only the attributes it needs
(nsw/nuw/sat on add/sub via `BinaryOverflowOp`).

A new `BinaryOpInterface` provides uniform `getLhs`/`getRhs`/`getResult`
access for passes and analyses.

The monolithic switch-based CIRToLLVMBinOpLowering is replaced by per-op
patterns generated through the existing CIRLowering.inc TableGen
infrastructure, with shared dispatch factored into two helpers:
`lowerSaturatableArithOp` for add/sub and `lowerIntFPBinaryOp` for
div/rem.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list