This simplifies the code and fixes handling for the callbr case, where the instruction needs to be inserted in the normal destination, rather than after the terminator. Originally part of D129660.
26 lines
697 B
LLVM
26 lines
697 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -S -reassociate < %s | FileCheck %s
|
|
|
|
define i32 @test(i1 %b) {
|
|
; CHECK-LABEL: @test(
|
|
; CHECK-NEXT: [[RES:%.*]] = callbr i32 asm "", "=r,!i"()
|
|
; CHECK-NEXT: to label [[NORMAL:%.*]] [label %abnormal]
|
|
; CHECK: normal:
|
|
; CHECK-NEXT: [[FACTOR:%.*]] = mul i32 [[RES]], -2
|
|
; CHECK-NEXT: [[SUB2:%.*]] = add i32 [[FACTOR]], 5
|
|
; CHECK-NEXT: ret i32 [[SUB2]]
|
|
; CHECK: abnormal:
|
|
; CHECK-NEXT: ret i32 0
|
|
;
|
|
%res = callbr i32 asm "", "=r,!i"()
|
|
to label %normal [label %abnormal]
|
|
|
|
normal:
|
|
%sub1 = sub nsw i32 5, %res
|
|
%sub2 = sub nsw i32 %sub1, %res
|
|
ret i32 %sub2
|
|
|
|
abnormal:
|
|
ret i32 0
|
|
}
|