| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 | |
| ; RUN: opt -S -passes=mergefunc %s | FileCheck %s | |
| define internal <2 x i32> @whole_vector_load(ptr %p) { | |
| ; CHECK-LABEL: define internal <2 x i32> @whole_vector_load( | |
| ; CHECK-SAME: ptr [[P:%.*]]) { | |
| ; CHECK-NEXT: [[VALUE:%.*]] = load atomic <2 x i32>, ptr [[P]] monotonic, align 4 | |
| ; CHECK-NEXT: ret <2 x i32> [[VALUE]] | |
| ; | |
| %value = load atomic <2 x i32>, ptr %p monotonic, align 4 | |
| ret <2 x i32> %value | |
| } | |
| define internal <2 x i32> @elementwise_load(ptr %p) { | |
| ; CHECK-LABEL: define internal <2 x i32> @elementwise_load( | |
| ; CHECK-SAME: ptr [[P:%.*]]) { | |
| ; CHECK-NEXT: [[VALUE:%.*]] = load atomic elementwise <2 x i32>, ptr [[P]] monotonic, align 4 | |
| ; CHECK-NEXT: ret <2 x i32> [[VALUE]] | |
| ; | |
| %value = load atomic elementwise <2 x i32>, ptr %p monotonic, align 4 | |
| ret <2 x i32> %value | |
| } | |
| define internal void @whole_vector_store(ptr %p, <2 x i32> %value) { | |
| ; CHECK-LABEL: define internal void @whole_vector_store( | |
| ; CHECK-SAME: ptr [[P:%.*]], <2 x i32> [[VALUE:%.*]]) { | |
| ; CHECK-NEXT: store atomic <2 x i32> [[VALUE]], ptr [[P]] monotonic, align 4 | |
| ; CHECK-NEXT: ret void | |
| ; | |
| store atomic <2 x i32> %value, ptr %p monotonic, align 4 | |
| ret void | |
| } | |
| define internal void @elementwise_store(ptr %p, <2 x i32> %value) { | |
| ; CHECK-LABEL: define internal void @elementwise_store( | |
| ; CHECK-SAME: ptr [[P:%.*]], <2 x i32> [[VALUE:%.*]]) { | |
| ; CHECK-NEXT: store atomic elementwise <2 x i32> [[VALUE]], ptr [[P]] monotonic, align 4 | |
| ; CHECK-NEXT: ret void | |
| ; | |
| store atomic elementwise <2 x i32> %value, ptr %p monotonic, align 4 | |
| ret void | |
| } | |
| define internal <2 x i32> @whole_vector_atomicrmw(ptr %p, <2 x i32> %value) { | |
| ; CHECK-LABEL: define internal <2 x i32> @whole_vector_atomicrmw( | |
| ; CHECK-SAME: ptr [[P:%.*]], <2 x i32> [[VALUE:%.*]]) { | |
| ; CHECK-NEXT: [[OLD:%.*]] = atomicrmw add ptr [[P]], <2 x i32> [[VALUE]] monotonic, align 8 | |
| ; CHECK-NEXT: ret <2 x i32> [[OLD]] | |
| ; | |
| %old = atomicrmw add ptr %p, <2 x i32> %value monotonic, align 8 | |
| ret <2 x i32> %old | |
| } | |
| define internal <2 x i32> @elementwise_atomicrmw(ptr %p, <2 x i32> %value) { | |
| ; CHECK-LABEL: define internal <2 x i32> @elementwise_atomicrmw( | |
| ; CHECK-SAME: ptr [[P:%.*]], <2 x i32> [[VALUE:%.*]]) { | |
| ; CHECK-NEXT: [[OLD:%.*]] = atomicrmw elementwise add ptr [[P]], <2 x i32> [[VALUE]] monotonic, align 8 | |
| ; CHECK-NEXT: ret <2 x i32> [[OLD]] | |
| ; | |
| %old = atomicrmw elementwise add ptr %p, <2 x i32> %value monotonic, align 8 | |
| ret <2 x i32> %old | |
| } |