brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 024b2e3 Raw
108 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -mtriple=i686-linux-gnu -passes=atomic-expand %s | FileCheck %s3 4define float @test_atomicrmw_fadd_f32(ptr %ptr, float %value) {5; CHECK-LABEL: @test_atomicrmw_fadd_f32(6; CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[PTR:%.*]], align 47; CHECK-NEXT:    br label [[ATOMICRMW_START:%.*]]8; CHECK:       atomicrmw.start:9; CHECK-NEXT:    [[LOADED:%.*]] = phi float [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]10; CHECK-NEXT:    [[NEW:%.*]] = fadd float [[LOADED]], [[VALUE:%.*]]11; CHECK-NEXT:    [[TMP2:%.*]] = bitcast float [[NEW]] to i3212; CHECK-NEXT:    [[TMP3:%.*]] = bitcast float [[LOADED]] to i3213; CHECK-NEXT:    [[TMP4:%.*]] = cmpxchg ptr [[PTR]], i32 [[TMP3]], i32 [[TMP2]] seq_cst seq_cst, align 414; CHECK-NEXT:    [[SUCCESS:%.*]] = extractvalue { i32, i1 } [[TMP4]], 115; CHECK-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i32, i1 } [[TMP4]], 016; CHECK-NEXT:    [[TMP5]] = bitcast i32 [[NEWLOADED]] to float17; CHECK-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]18; CHECK:       atomicrmw.end:19; CHECK-NEXT:    ret float [[TMP5]]20;21  %res = atomicrmw fadd ptr %ptr, float %value seq_cst22  ret float %res23}24 25define double @test_atomicrmw_fadd_f64(ptr %ptr, double %value) {26; CHECK-LABEL: @test_atomicrmw_fadd_f64(27; CHECK-NEXT:    [[TMP1:%.*]] = load double, ptr [[PTR:%.*]], align 828; CHECK-NEXT:    br label [[ATOMICRMW_START:%.*]]29; CHECK:       atomicrmw.start:30; CHECK-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]31; CHECK-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE:%.*]]32; CHECK-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i6433; CHECK-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i6434; CHECK-NEXT:    [[TMP4:%.*]] = cmpxchg ptr [[PTR]], i64 [[TMP3]], i64 [[TMP2]] seq_cst seq_cst, align 835; CHECK-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 136; CHECK-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 037; CHECK-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double38; CHECK-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]39; CHECK:       atomicrmw.end:40; CHECK-NEXT:    ret double [[TMP5]]41;42  %res = atomicrmw fadd ptr %ptr, double %value seq_cst43  ret double %res44}45 46define float @test_atomicrmw_fadd_f32_as1(ptr addrspace(1) %ptr, float %value) {47; CHECK-LABEL: @test_atomicrmw_fadd_f32_as1(48; CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr addrspace(1) [[PTR:%.*]], align 449; CHECK-NEXT:    br label [[ATOMICRMW_START:%.*]]50; CHECK:       atomicrmw.start:51; CHECK-NEXT:    [[LOADED:%.*]] = phi float [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]52; CHECK-NEXT:    [[NEW:%.*]] = fadd float [[LOADED]], [[VALUE:%.*]]53; CHECK-NEXT:    [[TMP2:%.*]] = bitcast float [[NEW]] to i3254; CHECK-NEXT:    [[TMP3:%.*]] = bitcast float [[LOADED]] to i3255; CHECK-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i32 [[TMP3]], i32 [[TMP2]] seq_cst seq_cst, align 456; CHECK-NEXT:    [[SUCCESS:%.*]] = extractvalue { i32, i1 } [[TMP4]], 157; CHECK-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i32, i1 } [[TMP4]], 058; CHECK-NEXT:    [[TMP5]] = bitcast i32 [[NEWLOADED]] to float59; CHECK-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]60; CHECK:       atomicrmw.end:61; CHECK-NEXT:    ret float [[TMP5]]62;63  %res = atomicrmw fadd ptr addrspace(1) %ptr, float %value seq_cst64  ret float %res65}66 67define float @test_atomicrmw_fsub_f32(ptr %ptr, float %value) {68; CHECK-LABEL: @test_atomicrmw_fsub_f32(69; CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[PTR:%.*]], align 470; CHECK-NEXT:    br label [[ATOMICRMW_START:%.*]]71; CHECK:       atomicrmw.start:72; CHECK-NEXT:    [[LOADED:%.*]] = phi float [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]73; CHECK-NEXT:    [[NEW:%.*]] = fsub float [[LOADED]], [[VALUE:%.*]]74; CHECK-NEXT:    [[TMP2:%.*]] = bitcast float [[NEW]] to i3275; CHECK-NEXT:    [[TMP3:%.*]] = bitcast float [[LOADED]] to i3276; CHECK-NEXT:    [[TMP4:%.*]] = cmpxchg ptr [[PTR]], i32 [[TMP3]], i32 [[TMP2]] seq_cst seq_cst, align 477; CHECK-NEXT:    [[SUCCESS:%.*]] = extractvalue { i32, i1 } [[TMP4]], 178; CHECK-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i32, i1 } [[TMP4]], 079; CHECK-NEXT:    [[TMP5]] = bitcast i32 [[NEWLOADED]] to float80; CHECK-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]81; CHECK:       atomicrmw.end:82; CHECK-NEXT:    ret float [[TMP5]]83;84  %res = atomicrmw fsub ptr %ptr, float %value seq_cst85  ret float %res86}87 88define double @test_atomicrmw_fsub_f64(ptr %ptr, double %value) {89; CHECK-LABEL: @test_atomicrmw_fsub_f64(90; CHECK-NEXT:    [[TMP1:%.*]] = load double, ptr [[PTR:%.*]], align 891; CHECK-NEXT:    br label [[ATOMICRMW_START:%.*]]92; CHECK:       atomicrmw.start:93; CHECK-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]94; CHECK-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE:%.*]]95; CHECK-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i6496; CHECK-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i6497; CHECK-NEXT:    [[TMP4:%.*]] = cmpxchg ptr [[PTR]], i64 [[TMP3]], i64 [[TMP2]] seq_cst seq_cst, align 898; CHECK-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 199; CHECK-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0100; CHECK-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double101; CHECK-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]102; CHECK:       atomicrmw.end:103; CHECK-NEXT:    ret double [[TMP5]]104;105  %res = atomicrmw fsub ptr %ptr, double %value seq_cst106  ret double %res107}108