Skip to content

Commit c2bd312

Browse files
committed
abdu/abds to canCreateUndefOrPoison
1 parent 606e7f9 commit c2bd312

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5619,6 +5619,8 @@ bool SelectionDAG::canCreateUndefOrPoison(SDValue Op, const APInt &DemandedElts,
56195619
case ISD::ADD:
56205620
case ISD::SUB:
56215621
case ISD::MUL:
5622+
case ISD::ABDU:
5623+
case ISD::ABDS:
56225624
case ISD::FNEG:
56235625
case ISD::FADD:
56245626
case ISD::FSUB:

llvm/test/CodeGen/AArch64/freeze.ll

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,51 @@ define i64 @freeze_array() {
395395
%t1 = add i64 %v1, %v2
396396
ret i64 %t1
397397
}
398+
399+
define i32 @freeze_abdu(i8 %x, i8 %y) {
400+
; CHECK-SD-LABEL: freeze_abdu:
401+
; CHECK-SD: // %bb.0:
402+
; CHECK-SD-NEXT: and w8, w0, #0xff
403+
; CHECK-SD-NEXT: sub w8, w8, w1, uxtb
404+
; CHECK-SD-NEXT: cmp w8, #0
405+
; CHECK-SD-NEXT: cneg w0, w8, mi
406+
; CHECK-SD-NEXT: ret
407+
;
408+
; CHECK-GI-LABEL: freeze_abdu:
409+
; CHECK-GI: // %bb.0:
410+
; CHECK-GI-NEXT: and w8, w0, #0xff
411+
; CHECK-GI-NEXT: sub w8, w8, w1, uxtb
412+
; CHECK-GI-NEXT: cmp w8, #0
413+
; CHECK-GI-NEXT: cneg w0, w8, le
414+
; CHECK-GI-NEXT: ret
415+
%a = zext i8 %x to i32
416+
%b = zext i8 %y to i32
417+
%d = sub i32 %a, %b
418+
%t = call i32 @llvm.abs.i32(i32 %d, i1 false)
419+
%f = freeze i32 %t
420+
ret i32 %f
421+
}
422+
423+
define i32 @freeze_abds(i8 %x, i8 %y) {
424+
; CHECK-SD-LABEL: freeze_abds:
425+
; CHECK-SD: // %bb.0:
426+
; CHECK-SD-NEXT: sxtb w8, w0
427+
; CHECK-SD-NEXT: sub w8, w8, w1, sxtb
428+
; CHECK-SD-NEXT: cmp w8, #0
429+
; CHECK-SD-NEXT: cneg w0, w8, mi
430+
; CHECK-SD-NEXT: ret
431+
;
432+
; CHECK-GI-LABEL: freeze_abds:
433+
; CHECK-GI: // %bb.0:
434+
; CHECK-GI-NEXT: sxtb w8, w0
435+
; CHECK-GI-NEXT: sub w8, w8, w1, sxtb
436+
; CHECK-GI-NEXT: cmp w8, #0
437+
; CHECK-GI-NEXT: cneg w0, w8, le
438+
; CHECK-GI-NEXT: ret
439+
%a = sext i8 %x to i32
440+
%b = sext i8 %y to i32
441+
%d = sub i32 %a, %b
442+
%abs = call i32 @llvm.abs.i32(i32 %d, i1 true)
443+
%f = freeze i32 %abs
444+
ret i32 %f
445+
}

0 commit comments

Comments
 (0)