# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -mtriple x86_64 -run-pass=x86-prelegalizer-combiner %s -o - | FileCheck %s # RUN: llc -mtriple x86_64 -passes=x86-prelegalizer-combiner-pass %s -o - | FileCheck %s --- name: mul_0 tracksRegLiveness: true body: | bb.1.entry: liveins: $eax ; Fold (x * 0) -> 0 ; CHECK-LABEL: name: mul_0 ; CHECK: liveins: $eax ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 0 ; CHECK-NEXT: $eax = COPY %cst(s32) ; CHECK-NEXT: RET implicit $eax %x:_(s32) = COPY $eax %cst:_(s32) = G_CONSTANT i32 0 %op:_(s32) = G_MUL %x(s32), %cst $eax = COPY %op(s32) RET implicit $eax ... --- name: mul_0_cant_replace tracksRegLiveness: true body: | bb.1.entry: liveins: $eax ; Fold (x * 0) -> 0 ; CHECK-LABEL: name: mul_0_cant_replace ; CHECK: liveins: $eax ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: %x:_(s32) = COPY $eax ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 0 ; CHECK-NEXT: %op:gpr(s32) = G_MUL %x, %cst ; CHECK-NEXT: $eax = COPY %op(s32) ; CHECK-NEXT: RET implicit $eax %x:_(s32) = COPY $eax %cst:_(s32) = G_CONSTANT i32 0 %op:gpr(s32) = G_MUL %x(s32), %cst $eax = COPY %op(s32) RET implicit $eax ... --- name: look_through_zext tracksRegLiveness: true body: | bb.0: liveins: $rax ; CHECK-LABEL: name: look_through_zext ; CHECK: liveins: $rax ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: %zero:_(s8) = G_CONSTANT i8 0 ; CHECK-NEXT: %zext_zero:_(s64) = G_ZEXT %zero(s8) ; CHECK-NEXT: $rax = COPY %zext_zero(s64) ; CHECK-NEXT: RET implicit $rax %zero:_(s8) = G_CONSTANT i8 0 %zext_zero:_(s64) = G_ZEXT %zero(s8) %c:_(s64) = G_CONSTANT i64 72340172838076673 %mul:_(s64) = G_MUL %c, %zext_zero $rax = COPY %mul(s64) RET implicit $rax ... --- name: mul_1_shift_of_shift liveins: - { reg: '$rax' } body: | bb.1: liveins: $rax ; CHECK-LABEL: name: mul_1_shift_of_shift ; CHECK: liveins: $rax ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $rax ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s64) ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[C]] ; CHECK-NEXT: $rax = COPY [[OR]](s64) ; CHECK-NEXT: RET implicit $rax %0:_(s64) = COPY $rax %1:_(s64) = G_CONSTANT i64 1 %2:_(s64) = G_SHL %0, %1(s64) %3:_(s64) = G_OR %2, %1 %4:_(s64) = G_MUL %3, %1 $rax = COPY %4(s64) RET implicit $rax ...