Skip to content

Commit 23e3237

Browse files
committed
Precommit test
1 parent 3215fd7 commit 23e3237

File tree

3 files changed

+206
-0
lines changed

3 files changed

+206
-0
lines changed

llvm/test/CodeGen/RISCV/pr101786.ll

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc --mtriple=riscv64 -o - %s | FileCheck %s
3+
4+
define i64 @test(i64 %x, ptr %p) {
5+
; CHECK-LABEL: test:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: mv a2, a0
8+
; CHECK-NEXT: li a0, 0
9+
; CHECK-NEXT: bgtz a2, .LBB0_3
10+
; CHECK-NEXT: # %bb.1: # %entry
11+
; CHECK-NEXT: srli a3, a2, 1
12+
; CHECK-NEXT: lui a4, 349525
13+
; CHECK-NEXT: addiw a4, a4, 1365
14+
; CHECK-NEXT: slli a5, a4, 32
15+
; CHECK-NEXT: add a4, a4, a5
16+
; CHECK-NEXT: and a3, a3, a4
17+
; CHECK-NEXT: sub a2, a2, a3
18+
; CHECK-NEXT: lui a3, 209715
19+
; CHECK-NEXT: addiw a3, a3, 819
20+
; CHECK-NEXT: slli a4, a3, 32
21+
; CHECK-NEXT: add a3, a3, a4
22+
; CHECK-NEXT: and a4, a2, a3
23+
; CHECK-NEXT: srli a2, a2, 2
24+
; CHECK-NEXT: and a2, a2, a3
25+
; CHECK-NEXT: add a2, a4, a2
26+
; CHECK-NEXT: srli a3, a2, 4
27+
; CHECK-NEXT: add a2, a2, a3
28+
; CHECK-NEXT: lui a3, 61681
29+
; CHECK-NEXT: addiw a3, a3, -241
30+
; CHECK-NEXT: slli a4, a3, 32
31+
; CHECK-NEXT: add a3, a3, a4
32+
; CHECK-NEXT: and a2, a2, a3
33+
; CHECK-NEXT: slli a3, a2, 8
34+
; CHECK-NEXT: add a2, a2, a3
35+
; CHECK-NEXT: slli a3, a2, 16
36+
; CHECK-NEXT: add a2, a2, a3
37+
; CHECK-NEXT: slli a3, a2, 32
38+
; CHECK-NEXT: add a2, a2, a3
39+
; CHECK-NEXT: srli a2, a2, 56
40+
; CHECK-NEXT: li a3, 1
41+
; CHECK-NEXT: bltu a3, a2, .LBB0_3
42+
; CHECK-NEXT: # %bb.2: # %if.else
43+
; CHECK-NEXT: ld a0, 0(a1)
44+
; CHECK-NEXT: .LBB0_3: # %if.end
45+
; CHECK-NEXT: ret
46+
entry:
47+
%ctpop = call i64 @llvm.ctpop.i64(i64 %x)
48+
%cmp1 = icmp ugt i64 %ctpop, 1
49+
%cmp2 = icmp sgt i64 %x, 0
50+
%or = or i1 %cmp2, %cmp1
51+
br i1 %or, label %if.end, label %if.else
52+
53+
if.else:
54+
%load = load i64, ptr %p, align 8
55+
br label %if.end
56+
57+
if.end:
58+
%res = phi i64 [0, %entry], [%load, %if.else]
59+
ret i64 %res
60+
}

llvm/test/CodeGen/X86/pr94829.ll

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc --mtriple=x86_64 -o - %s | FileCheck %s
3+
4+
define ptr @test(i64 %x) {
5+
; CHECK-LABEL: test:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: movq %rdi, %rax
8+
; CHECK-NEXT: shrq %rax
9+
; CHECK-NEXT: movabsq $6148914691236517205, %rcx # imm = 0x5555555555555555
10+
; CHECK-NEXT: andq %rax, %rcx
11+
; CHECK-NEXT: subq %rcx, %rdi
12+
; CHECK-NEXT: movabsq $3689348814741910323, %rax # imm = 0x3333333333333333
13+
; CHECK-NEXT: movq %rdi, %rcx
14+
; CHECK-NEXT: andq %rax, %rcx
15+
; CHECK-NEXT: shrq $2, %rdi
16+
; CHECK-NEXT: andq %rax, %rdi
17+
; CHECK-NEXT: addq %rcx, %rdi
18+
; CHECK-NEXT: movq %rdi, %rax
19+
; CHECK-NEXT: shrq $4, %rax
20+
; CHECK-NEXT: addq %rdi, %rax
21+
; CHECK-NEXT: movabsq $1085102592571150095, %rcx # imm = 0xF0F0F0F0F0F0F0F
22+
; CHECK-NEXT: andq %rax, %rcx
23+
; CHECK-NEXT: movabsq $72340172838076673, %rax # imm = 0x101010101010101
24+
; CHECK-NEXT: imulq %rcx, %rax
25+
; CHECK-NEXT: shrq $56, %rax
26+
; CHECK-NEXT: cmpq $2, %rax
27+
; CHECK-NEXT: jb .LBB0_2
28+
; CHECK-NEXT: # %bb.1: # %if.else
29+
; CHECK-NEXT: cmpl $2, %eax
30+
; CHECK-NEXT: .LBB0_2: # %exit1
31+
; CHECK-NEXT: xorl %eax, %eax
32+
; CHECK-NEXT: retq
33+
entry:
34+
%ctpop = tail call i64 @llvm.ctpop.i64(i64 %x)
35+
%cmp = icmp ult i64 %ctpop, 2
36+
br i1 %cmp, label %exit1, label %if.else
37+
38+
if.else:
39+
br i1 %cmp, label %exit2, label %exit3
40+
41+
exit1:
42+
ret ptr null
43+
44+
exit2:
45+
ret ptr null
46+
47+
exit3:
48+
ret ptr null
49+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -p 'require<profile-summary>,function(codegenprepare)' -S %s \
3+
; RUN: | FileCheck %s --check-prefix=SLOW
4+
; RUN: opt -p 'require<profile-summary>,function(codegenprepare)' -S --mattr=+zbb %s \
5+
; RUN: | FileCheck %s --check-prefix=FAST
6+
; REQUIRES: riscv64-registered-target
7+
8+
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
9+
target triple = "riscv64"
10+
11+
define i64 @test_ult_2(i64 %x, i64 %y, i64 %a, i64 %b) {
12+
; SLOW-LABEL: define i64 @test_ult_2(
13+
; SLOW-SAME: i64 [[X:%.*]], i64 [[Y:%.*]], i64 [[A:%.*]], i64 [[B:%.*]]) {
14+
; SLOW-NEXT: [[ENTRY:.*]]:
15+
; SLOW-NEXT: [[CTPOP:%.*]] = call i64 @llvm.ctpop.i64(i64 [[X]])
16+
; SLOW-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[CTPOP]], 1
17+
; SLOW-NEXT: [[CMP2:%.*]] = icmp sgt i64 [[Y]], 0
18+
; SLOW-NEXT: [[CMP:%.*]] = or i1 [[CMP2]], [[CMP1]]
19+
; SLOW-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]
20+
; SLOW: [[IF_THEN]]:
21+
; SLOW-NEXT: br label %[[IF_END]]
22+
; SLOW: [[IF_END]]:
23+
; SLOW-NEXT: [[RES:%.*]] = phi i64 [ [[A]], %[[IF_THEN]] ], [ [[B]], %[[ENTRY]] ]
24+
; SLOW-NEXT: ret i64 [[RES]]
25+
;
26+
; FAST-LABEL: define i64 @test_ult_2(
27+
; FAST-SAME: i64 [[X:%.*]], i64 [[Y:%.*]], i64 [[A:%.*]], i64 [[B:%.*]]) #[[ATTR0:[0-9]+]] {
28+
; FAST-NEXT: [[ENTRY:.*]]:
29+
; FAST-NEXT: [[CTPOP:%.*]] = call i64 @llvm.ctpop.i64(i64 [[X]])
30+
; FAST-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[CTPOP]], 1
31+
; FAST-NEXT: [[CMP2:%.*]] = icmp sgt i64 [[Y]], 0
32+
; FAST-NEXT: [[CMP:%.*]] = or i1 [[CMP2]], [[CMP1]]
33+
; FAST-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]
34+
; FAST: [[IF_THEN]]:
35+
; FAST-NEXT: br label %[[IF_END]]
36+
; FAST: [[IF_END]]:
37+
; FAST-NEXT: [[RES:%.*]] = phi i64 [ [[A]], %[[IF_THEN]] ], [ [[B]], %[[ENTRY]] ]
38+
; FAST-NEXT: ret i64 [[RES]]
39+
;
40+
entry:
41+
%ctpop = call i64 @llvm.ctpop.i64(i64 %x)
42+
%cmp1 = icmp ugt i64 %ctpop, 1
43+
%cmp2 = icmp sgt i64 %y, 0
44+
%cmp = or i1 %cmp2, %cmp1
45+
br i1 %cmp, label %if.then, label %if.end
46+
47+
if.then:
48+
br label %if.end
49+
50+
if.end:
51+
%res = phi i64 [ %a, %if.then ], [ %b, %entry ]
52+
ret i64 %res
53+
}
54+
55+
define i64 @test_ugt_1(i64 %x, i64 %y, i64 %a, i64 %b) {
56+
; SLOW-LABEL: define i64 @test_ugt_1(
57+
; SLOW-SAME: i64 [[X:%.*]], i64 [[Y:%.*]], i64 [[A:%.*]], i64 [[B:%.*]]) {
58+
; SLOW-NEXT: [[ENTRY:.*]]:
59+
; SLOW-NEXT: [[CTPOP:%.*]] = call i64 @llvm.ctpop.i64(i64 [[X]])
60+
; SLOW-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[CTPOP]], 1
61+
; SLOW-NEXT: [[CMP2:%.*]] = icmp sgt i64 [[Y]], 0
62+
; SLOW-NEXT: [[CMP:%.*]] = or i1 [[CMP2]], [[CMP1]]
63+
; SLOW-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]
64+
; SLOW: [[IF_THEN]]:
65+
; SLOW-NEXT: br label %[[IF_END]]
66+
; SLOW: [[IF_END]]:
67+
; SLOW-NEXT: [[RES:%.*]] = phi i64 [ [[A]], %[[IF_THEN]] ], [ [[B]], %[[ENTRY]] ]
68+
; SLOW-NEXT: ret i64 [[RES]]
69+
;
70+
; FAST-LABEL: define i64 @test_ugt_1(
71+
; FAST-SAME: i64 [[X:%.*]], i64 [[Y:%.*]], i64 [[A:%.*]], i64 [[B:%.*]]) #[[ATTR0]] {
72+
; FAST-NEXT: [[ENTRY:.*]]:
73+
; FAST-NEXT: [[CTPOP:%.*]] = call i64 @llvm.ctpop.i64(i64 [[X]])
74+
; FAST-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[CTPOP]], 1
75+
; FAST-NEXT: [[CMP2:%.*]] = icmp sgt i64 [[Y]], 0
76+
; FAST-NEXT: [[CMP:%.*]] = or i1 [[CMP2]], [[CMP1]]
77+
; FAST-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]
78+
; FAST: [[IF_THEN]]:
79+
; FAST-NEXT: br label %[[IF_END]]
80+
; FAST: [[IF_END]]:
81+
; FAST-NEXT: [[RES:%.*]] = phi i64 [ [[A]], %[[IF_THEN]] ], [ [[B]], %[[ENTRY]] ]
82+
; FAST-NEXT: ret i64 [[RES]]
83+
;
84+
entry:
85+
%ctpop = call i64 @llvm.ctpop.i64(i64 %x)
86+
%cmp1 = icmp ugt i64 %ctpop, 1
87+
%cmp2 = icmp sgt i64 %y, 0
88+
%cmp = or i1 %cmp2, %cmp1
89+
br i1 %cmp, label %if.then, label %if.end
90+
91+
if.then:
92+
br label %if.end
93+
94+
if.end:
95+
%res = phi i64 [ %a, %if.then ], [ %b, %entry ]
96+
ret i64 %res
97+
}

0 commit comments

Comments
 (0)