brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 84c7df1 Raw
192 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -S %s -passes=atomic-expand -mtriple=x86_64-linux-gnu | FileCheck %s3 4; This file tests the functions `llvm::convertAtomicLoadToIntegerType` and5; `llvm::convertAtomicStoreToIntegerType`. If X86 stops using this6; functionality, please move this test to a target which still is.7 8define float @float_load_expand(ptr %ptr) {9; CHECK-LABEL: define float @float_load_expand(10; CHECK-SAME: ptr [[PTR:%.*]]) {11; CHECK-NEXT:    [[TMP1:%.*]] = load atomic i32, ptr [[PTR]] unordered, align 412; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i32 [[TMP1]] to float13; CHECK-NEXT:    ret float [[TMP2]]14;15  %res = load atomic float, ptr %ptr unordered, align 416  ret float %res17}18 19define float @float_load_expand_seq_cst(ptr %ptr) {20; CHECK-LABEL: define float @float_load_expand_seq_cst(21; CHECK-SAME: ptr [[PTR:%.*]]) {22; CHECK-NEXT:    [[TMP1:%.*]] = load atomic i32, ptr [[PTR]] seq_cst, align 423; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i32 [[TMP1]] to float24; CHECK-NEXT:    ret float [[TMP2]]25;26  %res = load atomic float, ptr %ptr seq_cst, align 427  ret float %res28}29 30define float @float_load_expand_vol(ptr %ptr) {31; CHECK-LABEL: define float @float_load_expand_vol(32; CHECK-SAME: ptr [[PTR:%.*]]) {33; CHECK-NEXT:    [[TMP1:%.*]] = load atomic volatile i32, ptr [[PTR]] unordered, align 434; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i32 [[TMP1]] to float35; CHECK-NEXT:    ret float [[TMP2]]36;37  %res = load atomic volatile float, ptr %ptr unordered, align 438  ret float %res39}40 41define float @float_load_expand_addr1(ptr addrspace(1) %ptr) {42; CHECK-LABEL: define float @float_load_expand_addr1(43; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]]) {44; CHECK-NEXT:    [[TMP1:%.*]] = load atomic i32, ptr addrspace(1) [[PTR]] unordered, align 445; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i32 [[TMP1]] to float46; CHECK-NEXT:    ret float [[TMP2]]47;48  %res = load atomic float, ptr addrspace(1) %ptr unordered, align 449  ret float %res50}51 52define void @float_store_expand(ptr %ptr, float %v) {53; CHECK-LABEL: define void @float_store_expand(54; CHECK-SAME: ptr [[PTR:%.*]], float [[V:%.*]]) {55; CHECK-NEXT:    [[TMP1:%.*]] = bitcast float [[V]] to i3256; CHECK-NEXT:    store atomic i32 [[TMP1]], ptr [[PTR]] unordered, align 457; CHECK-NEXT:    ret void58;59  store atomic float %v, ptr %ptr unordered, align 460  ret void61}62 63define void @float_store_expand_seq_cst(ptr %ptr, float %v) {64; CHECK-LABEL: define void @float_store_expand_seq_cst(65; CHECK-SAME: ptr [[PTR:%.*]], float [[V:%.*]]) {66; CHECK-NEXT:    [[TMP1:%.*]] = bitcast float [[V]] to i3267; CHECK-NEXT:    store atomic i32 [[TMP1]], ptr [[PTR]] seq_cst, align 468; CHECK-NEXT:    ret void69;70  store atomic float %v, ptr %ptr seq_cst, align 471  ret void72}73 74define void @float_store_expand_vol(ptr %ptr, float %v) {75; CHECK-LABEL: define void @float_store_expand_vol(76; CHECK-SAME: ptr [[PTR:%.*]], float [[V:%.*]]) {77; CHECK-NEXT:    [[TMP1:%.*]] = bitcast float [[V]] to i3278; CHECK-NEXT:    store atomic volatile i32 [[TMP1]], ptr [[PTR]] unordered, align 479; CHECK-NEXT:    ret void80;81  store atomic volatile float %v, ptr %ptr unordered, align 482  ret void83}84 85define void @float_store_expand_addr1(ptr addrspace(1) %ptr, float %v) {86; CHECK-LABEL: define void @float_store_expand_addr1(87; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]], float [[V:%.*]]) {88; CHECK-NEXT:    [[TMP1:%.*]] = bitcast float [[V]] to i3289; CHECK-NEXT:    store atomic i32 [[TMP1]], ptr addrspace(1) [[PTR]] unordered, align 490; CHECK-NEXT:    ret void91;92  store atomic float %v, ptr addrspace(1) %ptr unordered, align 493  ret void94}95 96define void @pointer_cmpxchg_expand(ptr %ptr, ptr %v) {97; CHECK-LABEL: define void @pointer_cmpxchg_expand(98; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {99; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64100; CHECK-NEXT:    [[TMP2:%.*]] = cmpxchg ptr [[PTR]], i64 0, i64 [[TMP1]] seq_cst monotonic, align 8101; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0102; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1103; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr104; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0105; CHECK-NEXT:    [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1106; CHECK-NEXT:    ret void107;108  cmpxchg ptr %ptr, ptr null, ptr %v seq_cst monotonic109  ret void110}111 112define void @pointer_cmpxchg_expand2(ptr %ptr, ptr %v) {113; CHECK-LABEL: define void @pointer_cmpxchg_expand2(114; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {115; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64116; CHECK-NEXT:    [[TMP2:%.*]] = cmpxchg ptr [[PTR]], i64 0, i64 [[TMP1]] release monotonic, align 8117; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0118; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1119; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr120; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0121; CHECK-NEXT:    [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1122; CHECK-NEXT:    ret void123;124  cmpxchg ptr %ptr, ptr null, ptr %v release monotonic125  ret void126}127 128define void @pointer_cmpxchg_expand3(ptr %ptr, ptr %v) {129; CHECK-LABEL: define void @pointer_cmpxchg_expand3(130; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {131; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64132; CHECK-NEXT:    [[TMP2:%.*]] = cmpxchg ptr [[PTR]], i64 0, i64 [[TMP1]] seq_cst seq_cst, align 8133; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0134; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1135; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr136; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0137; CHECK-NEXT:    [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1138; CHECK-NEXT:    ret void139;140  cmpxchg ptr %ptr, ptr null, ptr %v seq_cst seq_cst141  ret void142}143 144define void @pointer_cmpxchg_expand4(ptr %ptr, ptr %v) {145; CHECK-LABEL: define void @pointer_cmpxchg_expand4(146; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {147; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64148; CHECK-NEXT:    [[TMP2:%.*]] = cmpxchg weak ptr [[PTR]], i64 0, i64 [[TMP1]] seq_cst seq_cst, align 8149; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0150; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1151; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr152; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0153; CHECK-NEXT:    [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1154; CHECK-NEXT:    ret void155;156  cmpxchg weak ptr %ptr, ptr null, ptr %v seq_cst seq_cst157  ret void158}159 160define void @pointer_cmpxchg_expand5(ptr %ptr, ptr %v) {161; CHECK-LABEL: define void @pointer_cmpxchg_expand5(162; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {163; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64164; CHECK-NEXT:    [[TMP2:%.*]] = cmpxchg volatile ptr [[PTR]], i64 0, i64 [[TMP1]] seq_cst seq_cst, align 8165; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0166; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1167; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr168; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0169; CHECK-NEXT:    [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1170; CHECK-NEXT:    ret void171;172  cmpxchg volatile ptr %ptr, ptr null, ptr %v seq_cst seq_cst173  ret void174}175 176define void @pointer_cmpxchg_expand6(ptr addrspace(1) %ptr, ptr addrspace(2) %v) {177; CHECK-LABEL: define void @pointer_cmpxchg_expand6(178; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]], ptr addrspace(2) [[V:%.*]]) {179; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[V]] to i64180; CHECK-NEXT:    [[TMP2:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 0, i64 [[TMP1]] seq_cst seq_cst, align 8181; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0182; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1183; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr addrspace(2)184; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue { ptr addrspace(2), i1 } poison, ptr addrspace(2) [[TMP5]], 0185; CHECK-NEXT:    [[TMP7:%.*]] = insertvalue { ptr addrspace(2), i1 } [[TMP6]], i1 [[TMP4]], 1186; CHECK-NEXT:    ret void187;188  cmpxchg ptr addrspace(1) %ptr, ptr addrspace(2) null, ptr addrspace(2) %v seq_cst seq_cst189  ret void190}191 192