Skip to content

Commit fd9fa66

Browse files
committed
[RISCV][test] Add test for "subtraction if above a constant threshold" miscompile
1 parent 849ecbc commit fd9fa66

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

llvm/test/CodeGen/RISCV/rv32zbb.ll

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1917,3 +1917,49 @@ define i32 @sub_if_uge_C_swapped_i32(i32 %x) {
19171917
%cond = select i1 %cmp, i32 %x, i32 %sub
19181918
ret i32 %cond
19191919
}
1920+
1921+
define i7 @sub_if_uge_C_nsw_i7(i7 %a) {
1922+
; RV32I-LABEL: sub_if_uge_C_nsw_i7:
1923+
; RV32I: # %bb.0:
1924+
; RV32I-NEXT: ori a0, a0, 51
1925+
; RV32I-NEXT: andi a1, a0, 127
1926+
; RV32I-NEXT: sltiu a1, a1, 111
1927+
; RV32I-NEXT: addi a1, a1, -1
1928+
; RV32I-NEXT: andi a1, a1, 17
1929+
; RV32I-NEXT: add a0, a0, a1
1930+
; RV32I-NEXT: ret
1931+
;
1932+
; RV32ZBB-LABEL: sub_if_uge_C_nsw_i7:
1933+
; RV32ZBB: # %bb.0:
1934+
; RV32ZBB-NEXT: ori a0, a0, 51
1935+
; RV32ZBB-NEXT: addi a0, a0, 17
1936+
; RV32ZBB-NEXT: ret
1937+
%x = or i7 %a, 51
1938+
%c = icmp ugt i7 %x, -18
1939+
%add = add nsw i7 %x, 17
1940+
%s = select i1 %c, i7 %add, i7 %x
1941+
ret i7 %s
1942+
}
1943+
1944+
define i7 @sub_if_uge_C_swapped_nsw_i7(i7 %a) {
1945+
; RV32I-LABEL: sub_if_uge_C_swapped_nsw_i7:
1946+
; RV32I: # %bb.0:
1947+
; RV32I-NEXT: ori a0, a0, 51
1948+
; RV32I-NEXT: andi a1, a0, 127
1949+
; RV32I-NEXT: sltiu a1, a1, 111
1950+
; RV32I-NEXT: addi a1, a1, -1
1951+
; RV32I-NEXT: andi a1, a1, 17
1952+
; RV32I-NEXT: add a0, a0, a1
1953+
; RV32I-NEXT: ret
1954+
;
1955+
; RV32ZBB-LABEL: sub_if_uge_C_swapped_nsw_i7:
1956+
; RV32ZBB: # %bb.0:
1957+
; RV32ZBB-NEXT: ori a0, a0, 51
1958+
; RV32ZBB-NEXT: addi a0, a0, 17
1959+
; RV32ZBB-NEXT: ret
1960+
%x = or i7 %a, 51
1961+
%c = icmp ult i7 %x, -17
1962+
%add = add nsw i7 %x, 17
1963+
%s = select i1 %c, i7 %x, i7 %add
1964+
ret i7 %s
1965+
}

llvm/test/CodeGen/RISCV/rv64zbb.ll

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2072,3 +2072,49 @@ define i32 @sub_if_uge_C_swapped_i32(i32 signext %x) {
20722072
%cond = select i1 %cmp, i32 %x, i32 %sub
20732073
ret i32 %cond
20742074
}
2075+
2076+
define i7 @sub_if_uge_C_nsw_i7(i7 %a) {
2077+
; RV64I-LABEL: sub_if_uge_C_nsw_i7:
2078+
; RV64I: # %bb.0:
2079+
; RV64I-NEXT: ori a0, a0, 51
2080+
; RV64I-NEXT: andi a1, a0, 127
2081+
; RV64I-NEXT: sltiu a1, a1, 111
2082+
; RV64I-NEXT: addi a1, a1, -1
2083+
; RV64I-NEXT: andi a1, a1, 17
2084+
; RV64I-NEXT: add a0, a0, a1
2085+
; RV64I-NEXT: ret
2086+
;
2087+
; RV64ZBB-LABEL: sub_if_uge_C_nsw_i7:
2088+
; RV64ZBB: # %bb.0:
2089+
; RV64ZBB-NEXT: ori a0, a0, 51
2090+
; RV64ZBB-NEXT: addi a0, a0, 17
2091+
; RV64ZBB-NEXT: ret
2092+
%x = or i7 %a, 51
2093+
%c = icmp ugt i7 %x, -18
2094+
%add = add nsw i7 %x, 17
2095+
%s = select i1 %c, i7 %add, i7 %x
2096+
ret i7 %s
2097+
}
2098+
2099+
define i7 @sub_if_uge_C_swapped_nsw_i7(i7 %a) {
2100+
; RV64I-LABEL: sub_if_uge_C_swapped_nsw_i7:
2101+
; RV64I: # %bb.0:
2102+
; RV64I-NEXT: ori a0, a0, 51
2103+
; RV64I-NEXT: andi a1, a0, 127
2104+
; RV64I-NEXT: sltiu a1, a1, 111
2105+
; RV64I-NEXT: addi a1, a1, -1
2106+
; RV64I-NEXT: andi a1, a1, 17
2107+
; RV64I-NEXT: add a0, a0, a1
2108+
; RV64I-NEXT: ret
2109+
;
2110+
; RV64ZBB-LABEL: sub_if_uge_C_swapped_nsw_i7:
2111+
; RV64ZBB: # %bb.0:
2112+
; RV64ZBB-NEXT: ori a0, a0, 51
2113+
; RV64ZBB-NEXT: addi a0, a0, 17
2114+
; RV64ZBB-NEXT: ret
2115+
%x = or i7 %a, 51
2116+
%c = icmp ult i7 %x, -17
2117+
%add = add nsw i7 %x, 17
2118+
%s = select i1 %c, i7 %x, i7 %add
2119+
ret i7 %s
2120+
}

0 commit comments

Comments
 (0)