mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 23:23:38 -04:00
[InstSimplify] Fix addo/subo undef folds (PR42209)
Fix folds of addo and subo with an undef operand to be:
`@llvm.{u,s}{add,sub}.with.overflow` all fold to `{ undef, false }`,
as per LLVM undef rules.
Same for commuted variants.
Based on the original version of the patch by @nikic.
Fixes [[ https://bugs.llvm.org/show_bug.cgi?id=42209 | PR42209 ]]
Differential Revision: https://reviews.llvm.org/D63065
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363522 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -29,7 +29,7 @@ define i8 @test_uadd2() {
|
||||
|
||||
define {i8, i1} @test_uadd3(i8 %v) {
|
||||
; CHECK-LABEL: @test_uadd3(
|
||||
; CHECK-NEXT: ret { i8, i1 } undef
|
||||
; CHECK-NEXT: ret { i8, i1 } { i8 undef, i1 false }
|
||||
;
|
||||
%result = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 %v, i8 undef)
|
||||
ret {i8, i1} %result
|
||||
@@ -37,7 +37,7 @@ define {i8, i1} @test_uadd3(i8 %v) {
|
||||
|
||||
define {i8, i1} @test_uadd4(i8 %v) {
|
||||
; CHECK-LABEL: @test_uadd4(
|
||||
; CHECK-NEXT: ret { i8, i1 } undef
|
||||
; CHECK-NEXT: ret { i8, i1 } { i8 undef, i1 false }
|
||||
;
|
||||
%result = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 undef, i8 %v)
|
||||
ret {i8, i1} %result
|
||||
@@ -63,7 +63,7 @@ define i8 @test_sadd2() {
|
||||
|
||||
define {i8, i1} @test_sadd3(i8 %v) {
|
||||
; CHECK-LABEL: @test_sadd3(
|
||||
; CHECK-NEXT: ret { i8, i1 } undef
|
||||
; CHECK-NEXT: ret { i8, i1 } { i8 undef, i1 false }
|
||||
;
|
||||
%result = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 %v, i8 undef)
|
||||
ret {i8, i1} %result
|
||||
@@ -71,7 +71,7 @@ define {i8, i1} @test_sadd3(i8 %v) {
|
||||
|
||||
define {i8, i1} @test_sadd4(i8 %v) {
|
||||
; CHECK-LABEL: @test_sadd4(
|
||||
; CHECK-NEXT: ret { i8, i1 } undef
|
||||
; CHECK-NEXT: ret { i8, i1 } { i8 undef, i1 false }
|
||||
;
|
||||
%result = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 undef, i8 %v)
|
||||
ret {i8, i1} %result
|
||||
@@ -87,7 +87,7 @@ define {i8, i1} @test_usub1(i8 %V) {
|
||||
|
||||
define {i8, i1} @test_usub2(i8 %V) {
|
||||
; CHECK-LABEL: @test_usub2(
|
||||
; CHECK-NEXT: ret { i8, i1 } undef
|
||||
; CHECK-NEXT: ret { i8, i1 } { i8 undef, i1 false }
|
||||
;
|
||||
%x = call {i8, i1} @llvm.usub.with.overflow.i8(i8 %V, i8 undef)
|
||||
ret {i8, i1} %x
|
||||
@@ -95,7 +95,7 @@ define {i8, i1} @test_usub2(i8 %V) {
|
||||
|
||||
define {i8, i1} @test_usub3(i8 %V) {
|
||||
; CHECK-LABEL: @test_usub3(
|
||||
; CHECK-NEXT: ret { i8, i1 } undef
|
||||
; CHECK-NEXT: ret { i8, i1 } { i8 undef, i1 false }
|
||||
;
|
||||
%x = call {i8, i1} @llvm.usub.with.overflow.i8(i8 undef, i8 %V)
|
||||
ret {i8, i1} %x
|
||||
@@ -111,7 +111,7 @@ define {i8, i1} @test_ssub1(i8 %V) {
|
||||
|
||||
define {i8, i1} @test_ssub2(i8 %V) {
|
||||
; CHECK-LABEL: @test_ssub2(
|
||||
; CHECK-NEXT: ret { i8, i1 } undef
|
||||
; CHECK-NEXT: ret { i8, i1 } { i8 undef, i1 false }
|
||||
;
|
||||
%x = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 %V, i8 undef)
|
||||
ret {i8, i1} %x
|
||||
@@ -119,7 +119,7 @@ define {i8, i1} @test_ssub2(i8 %V) {
|
||||
|
||||
define {i8, i1} @test_ssub3(i8 %V) {
|
||||
; CHECK-LABEL: @test_ssub3(
|
||||
; CHECK-NEXT: ret { i8, i1 } undef
|
||||
; CHECK-NEXT: ret { i8, i1 } { i8 undef, i1 false }
|
||||
;
|
||||
%x = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 undef, i8 %V)
|
||||
ret {i8, i1} %x
|
||||
|
||||
Reference in New Issue
Block a user