[AMDGPU] Add True16 register classes.
[llvm-project.git] / llvm / test / Transforms / NewGVN / pr12979.ll
bloba63fb9a0104c1437ec9b6d1016e70964239683a8
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt -passes=newgvn -S < %s | FileCheck %s
4 define i32 @test1(i32 %x, i32 %y) {
5 ; CHECK-LABEL: define i32 @test1
6 ; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {
7 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[X]], [[Y]]
8 ; CHECK-NEXT:    [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]
9 ; CHECK-NEXT:    ret i32 [[FOO]]
12   %add1 = add nsw i32 %x, %y
13   %add2 = add     i32 %x, %y
14   %foo = add i32 %add1, %add2
15   ret i32 %foo
18 define i32 @test2(i32 %x, i32 %y) {
19 ; CHECK-LABEL: define i32 @test2
20 ; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {
21 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[X]], [[Y]]
22 ; CHECK-NEXT:    [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]
23 ; CHECK-NEXT:    ret i32 [[FOO]]
26   %add1 = add nuw i32 %x, %y
27   %add2 = add     i32 %x, %y
28   %foo = add i32 %add1, %add2
29   ret i32 %foo
32 define i32 @test3(i32 %x, i32 %y) {
33 ; CHECK-LABEL: define i32 @test3
34 ; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {
35 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[X]], [[Y]]
36 ; CHECK-NEXT:    [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]
37 ; CHECK-NEXT:    ret i32 [[FOO]]
40   %add1 = add nuw nsw i32 %x, %y
41   %add2 = add     i32 %x, %y
42   %foo = add i32 %add1, %add2
43   ret i32 %foo
46 define i32 @test4(i32 %x, i32 %y) {
47 ; CHECK-LABEL: define i32 @test4
48 ; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {
49 ; CHECK-NEXT:    [[ADD1:%.*]] = add nsw i32 [[X]], [[Y]]
50 ; CHECK-NEXT:    [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]
51 ; CHECK-NEXT:    ret i32 [[FOO]]
54   %add1 = add nsw i32 %x, %y
55   %add2 = add nsw i32 %x, %y
56   %foo = add i32 %add1, %add2
57   ret i32 %foo
60 define i32 @test5(i32 %x, i32 %y) {
61 ; CHECK-LABEL: define i32 @test5
62 ; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {
63 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[X]], [[Y]]
64 ; CHECK-NEXT:    [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]
65 ; CHECK-NEXT:    ret i32 [[FOO]]
68   %add1 = add nuw i32 %x, %y
69   %add2 = add nsw i32 %x, %y
70   %foo = add i32 %add1, %add2
71   ret i32 %foo
74 define i32 @test6(i32 %x, i32 %y) {
75 ; CHECK-LABEL: define i32 @test6
76 ; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {
77 ; CHECK-NEXT:    [[ADD1:%.*]] = add nsw i32 [[X]], [[Y]]
78 ; CHECK-NEXT:    [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]
79 ; CHECK-NEXT:    ret i32 [[FOO]]
82   %add1 = add nuw nsw i32 %x, %y
83   %add2 = add nsw i32 %x, %y
84   %foo = add i32 %add1, %add2
85   ret i32 %foo
88 define i32 @test7(i32 %x, i32 %y) {
89 ; CHECK-LABEL: define i32 @test7
90 ; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {
91 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[X]], [[Y]]
92 ; CHECK-NEXT:    [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]
93 ; CHECK-NEXT:    ret i32 [[FOO]]
96   %add1 = add i32 %x, %y, !what_is_this !{}
97   %add2 = add i32 %x, %y
98   %foo = add i32 %add1, %add2
99   ret i32 %foo
102 declare void @mumble(i2, i2)
104 define void @test8(i2 %x) {
105 ; CHECK-LABEL: define void @test8
106 ; CHECK-SAME: (i2 [[X:%.*]]) {
107 ; CHECK-NEXT:    [[ASHR0:%.*]] = ashr i2 [[X]], 1
108 ; CHECK-NEXT:    call void @mumble(i2 [[ASHR0]], i2 [[ASHR0]])
109 ; CHECK-NEXT:    ret void
112   %ashr0 = ashr exact i2 %x, 1
113   %ashr1 = ashr i2 %x, 1
114   call void @mumble(i2 %ashr0, i2 %ashr1)
115   ret void