Skip to content

Commit 30ba72b

Browse files
committed
[flang][llvm][OpenMP][OpenACC] Add implicit casts to omp.atomic and acc.atomic
1 parent ddfd81b commit 30ba72b

File tree

7 files changed

+169
-164
lines changed

7 files changed

+169
-164
lines changed

flang/include/flang/Lower/DirectivesCommon.h

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -368,24 +368,15 @@ void genOmpAccAtomicRead(Fortran::lower::AbstractConverter &converter,
368368
rightHandClauseList = &std::get<2>(atomicRead.t);
369369
leftHandClauseList = &std::get<0>(atomicRead.t);
370370
}
371-
372-
const auto &assignmentStmtExpr = std::get<Fortran::parser::Expr>(
373-
std::get<Fortran::parser::Statement<Fortran::parser::AssignmentStmt>>(
374-
atomicRead.t)
375-
.statement.t);
376-
const auto &assignmentStmtVariable = std::get<Fortran::parser::Variable>(
377-
std::get<Fortran::parser::Statement<Fortran::parser::AssignmentStmt>>(
378-
atomicRead.t)
379-
.statement.t);
380-
371+
372+
const Fortran::parser::AssignmentStmt &stmt =
373+
std::get<Fortran::parser::Statement<Fortran::parser::AssignmentStmt>>(
374+
atomicRead.t).statement;
375+
const Fortran::evaluate::Assignment &assign = *stmt.typedAssignment->v;
381376
Fortran::lower::StatementContext stmtCtx;
382-
const Fortran::semantics::SomeExpr &fromExpr =
383-
*Fortran::semantics::GetExpr(assignmentStmtExpr);
384-
mlir::Type elementType = converter.genType(fromExpr);
385-
mlir::Value fromAddress =
386-
fir::getBase(converter.genExprAddr(fromExpr, stmtCtx));
387-
mlir::Value toAddress = fir::getBase(converter.genExprAddr(
388-
*Fortran::semantics::GetExpr(assignmentStmtVariable), stmtCtx));
377+
mlir::Value fromAddress = fir::getBase(converter.genExprAddr(assign.rhs, stmtCtx));
378+
mlir::Value toAddress = fir::getBase(converter.genExprAddr(assign.lhs, stmtCtx));
379+
mlir::Type elementType = fir::unwrapRefType(fromAddress.getType());
389380
genOmpAccAtomicCaptureStatement(converter, fromAddress, toAddress,
390381
leftHandClauseList, rightHandClauseList,
391382
elementType, loc);
@@ -481,6 +472,9 @@ void genOmpAccAtomicCapture(Fortran::lower::AbstractConverter &converter,
481472
mlir::Type stmt2VarType =
482473
fir::getBase(converter.genExprValue(assign2.lhs, stmtCtx)).getType();
483474

475+
// Check if implicit type is needed
476+
if(stmt1VarType != stmt2VarType)
477+
TODO(loc, "atomic capture requiring implicit type casts");
484478
mlir::Operation *atomicCaptureOp = nullptr;
485479
if constexpr (std::is_same<AtomicListT,
486480
Fortran::parser::OmpAtomicClauseList>()) {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
!RUN: %not_todo_cmd %flang_fc1 -emit-hlfir -fopenacc -o - %s 2>&1 | FileCheck %s
2+
3+
!CHECK: not yet implemented: atomic capture requiring implicit type casts
4+
subroutine capture_with_convert_f32_to_i32()
5+
implicit none
6+
integer :: k, v, i
7+
8+
k = 1
9+
v = 0
10+
11+
!$acc atomic capture
12+
v = k
13+
k = (i + 1) * 3.14
14+
!$acc end atomic
15+
end subroutine
16+
17+
subroutine capture_with_convert_i32_to_f64()
18+
real(8) :: x
19+
integer :: v
20+
x = 1.0
21+
v = 0
22+
!$acc atomic capture
23+
v = x
24+
x = v
25+
!$acc end atomic
26+
end subroutine capture_with_convert_i32_to_f64
27+
28+
subroutine capture_with_convert_f64_to_i32()
29+
integer :: x
30+
real(8) :: v
31+
x = 1
32+
v = 0
33+
!$acc atomic capture
34+
x = v * v
35+
v = x
36+
!$acc end atomic
37+
end subroutine capture_with_convert_f64_to_i32
38+
39+
subroutine capture_with_convert_i32_to_f32()
40+
real(4) :: x
41+
integer :: v
42+
x = 1.0
43+
v = 0
44+
!$acc atomic capture
45+
v = x
46+
x = x + v
47+
!$acc end atomic
48+
end subroutine capture_with_convert_i32_to_f32

flang/test/Lower/OpenACC/acc-atomic-capture.f90

Lines changed: 0 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -96,121 +96,6 @@ subroutine pointers_in_atomic_capture()
9696
end subroutine
9797

9898

99-
subroutine capture_with_convert_f32_to_i32()
100-
implicit none
101-
integer :: k, v, i
102-
103-
k = 1
104-
v = 0
105-
106-
!$acc atomic capture
107-
v = k
108-
k = (i + 1) * 3.14
109-
!$acc end atomic
110-
end subroutine
111-
112-
! CHECK-LABEL: func.func @_QPcapture_with_convert_f32_to_i32()
113-
! CHECK: %[[K:.*]] = fir.alloca i32 {bindc_name = "k", uniq_name = "_QFcapture_with_convert_f32_to_i32Ek"}
114-
! CHECK: %[[K_DECL:.*]]:2 = hlfir.declare %[[K]] {uniq_name = "_QFcapture_with_convert_f32_to_i32Ek"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
115-
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_f32_to_i32Ev"}
116-
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_f32_to_i32Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
117-
! CHECK: %[[CST:.*]] = arith.constant 3.140000e+00 : f32
118-
! CHECK: %[[MUL:.*]] = arith.mulf %{{.*}}, %[[CST]] fastmath<contract> : f32
119-
! CHECK: %[[CONV:.*]] = fir.convert %[[MUL]] : (f32) -> i32
120-
! CHECK: acc.atomic.capture {
121-
! CHECK: acc.atomic.read %[[V_DECL]]#0 = %[[K_DECL]]#0 : !fir.ref<i32>, !fir.ref<i32>, i32
122-
! CHECK: acc.atomic.write %[[K_DECL]]#0 = %[[CONV]] : !fir.ref<i32>, i32
123-
! CHECK: }
124-
125-
subroutine capture_with_convert_i32_to_f64()
126-
real(8) :: x
127-
integer :: v
128-
x = 1.0
129-
v = 0
130-
!$acc atomic capture
131-
v = x
132-
x = v
133-
!$acc end atomic
134-
end subroutine capture_with_convert_i32_to_f64
135-
136-
! CHECK-LABEL: func.func @_QPcapture_with_convert_i32_to_f64()
137-
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_i32_to_f64Ev"}
138-
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_i32_to_f64Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
139-
! CHECK: %[[X:.*]] = fir.alloca f64 {bindc_name = "x", uniq_name = "_QFcapture_with_convert_i32_to_f64Ex"}
140-
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcapture_with_convert_i32_to_f64Ex"} : (!fir.ref<f64>) -> (!fir.ref<f64>, !fir.ref<f64>)
141-
! CHECK: %[[CST:.*]] = arith.constant 1.000000e+00 : f64
142-
! CHECK: hlfir.assign %[[CST]] to %[[X_DECL]]#0 : f64, !fir.ref<f64>
143-
! CHECK: %c0_i32 = arith.constant 0 : i32
144-
! CHECK: hlfir.assign %c0_i32 to %[[V_DECL]]#0 : i32, !fir.ref<i32>
145-
! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<i32>
146-
! CHECK: %[[CONV:.*]] = fir.convert %[[LOAD]] : (i32) -> f64
147-
! CHECK: acc.atomic.capture {
148-
! CHECK: acc.atomic.read %[[V_DECL]]#0 = %[[X_DECL]]#0 : !fir.ref<i32>, !fir.ref<f64>, f64
149-
! CHECK: acc.atomic.write %[[X_DECL]]#0 = %[[CONV]] : !fir.ref<f64>, f64
150-
! CHECK: }
151-
152-
subroutine capture_with_convert_f64_to_i32()
153-
integer :: x
154-
real(8) :: v
155-
x = 1
156-
v = 0
157-
!$acc atomic capture
158-
x = v * v
159-
v = x
160-
!$acc end atomic
161-
end subroutine capture_with_convert_f64_to_i32
162-
163-
! CHECK-LABEL: func.func @_QPcapture_with_convert_f64_to_i32()
164-
! CHECK: %[[V:.*]] = fir.alloca f64 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_f64_to_i32Ev"}
165-
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_f64_to_i32Ev"} : (!fir.ref<f64>) -> (!fir.ref<f64>, !fir.ref<f64>)
166-
! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFcapture_with_convert_f64_to_i32Ex"}
167-
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcapture_with_convert_f64_to_i32Ex"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
168-
! CHECK: %c1_i32 = arith.constant 1 : i32
169-
! CHECK: hlfir.assign %c1_i32 to %[[X_DECL]]#0 : i32, !fir.ref<i32>
170-
! CHECK: %[[CST:.*]] = arith.constant 0.000000e+00 : f64
171-
! CHECK: hlfir.assign %[[CST]] to %[[V_DECL]]#0 : f64, !fir.ref<f64>
172-
! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<f64>
173-
! CHECK: acc.atomic.capture {
174-
! CHECK: acc.atomic.update %[[X_DECL]]#0 : !fir.ref<i32> {
175-
! CHECK: ^bb0(%arg0: i32):
176-
! CHECK: %[[MUL:.*]] = arith.mulf %[[LOAD]], %[[LOAD]] fastmath<contract> : f64
177-
! CHECK: %[[CONV:.*]] = fir.convert %[[MUL]] : (f64) -> i32
178-
! CHECK: acc.yield %[[CONV]] : i32
179-
! CHECK: }
180-
! CHECK: acc.atomic.read %[[V_DECL]]#0 = %[[X_DECL]]#0 : !fir.ref<f64>, !fir.ref<i32>, i32
181-
! CHECK: }
182-
183-
subroutine capture_with_convert_i32_to_f32()
184-
real(4) :: x
185-
integer :: v
186-
x = 1.0
187-
v = 0
188-
!$acc atomic capture
189-
v = x
190-
x = x + v
191-
!$acc end atomic
192-
end subroutine capture_with_convert_i32_to_f32
193-
194-
! CHECK-LABEL: func.func @_QPcapture_with_convert_i32_to_f32()
195-
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_i32_to_f32Ev"}
196-
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_i32_to_f32Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
197-
! CHECK: %[[X:.*]] = fir.alloca f32 {bindc_name = "x", uniq_name = "_QFcapture_with_convert_i32_to_f32Ex"}
198-
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcapture_with_convert_i32_to_f32Ex"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
199-
! CHECK: %[[CST:.*]] = arith.constant 1.000000e+00 : f32
200-
! CHECK: hlfir.assign %[[CST]] to %[[X_DECL]]#0 : f32, !fir.ref<f32>
201-
! CHECK: %c0_i32 = arith.constant 0 : i32
202-
! CHECK: hlfir.assign %c0_i32 to %[[V_DECL]]#0 : i32, !fir.ref<i32>
203-
! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<i32>
204-
! CHECK: acc.atomic.capture {
205-
! CHECK: acc.atomic.read %[[V_DECL]]#0 = %[[X_DECL]]#0 : !fir.ref<i32>, !fir.ref<f32>, f32
206-
! CHECK: acc.atomic.update %[[X_DECL]]#0 : !fir.ref<f32> {
207-
! CHECK: ^bb0(%arg0: f32):
208-
! CHECK: %[[CONV:.*]] = fir.convert %[[LOAD]] : (i32) -> f32
209-
! CHECK: %[[ADD:.*]] = arith.addf %arg0, %[[CONV]] fastmath<contract> : f32
210-
! CHECK: acc.yield %[[ADD]] : f32
211-
! CHECK: }
212-
! CHECK: }
213-
21499
subroutine array_ref_in_atomic_capture1
215100
integer :: x(10), v
216101
!$acc atomic capture

flang/test/Lower/OpenACC/acc-atomic-read.f90

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,12 @@ subroutine atomic_read_with_cast()
5151
end
5252

5353
! CHECK-LABEL: func.func @_QPatomic_read_with_cast() {
54+
! CHECK: %[[ALLOCA:.*]] = fir.alloca i64
5455
! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFatomic_read_with_castEx"}
5556
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFatomic_read_with_castEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
5657
! CHECK: %[[Y:.*]] = fir.alloca i64 {bindc_name = "y", uniq_name = "_QFatomic_read_with_castEy"}
5758
! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {uniq_name = "_QFatomic_read_with_castEy"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>)
58-
! CHECK: acc.atomic.read %[[Y_DECL]]#0 = %[[X_DECL]]#0 : !fir.ref<i64>, !fir.ref<i32>, i32
59+
! CHECK: %[[LOAD:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32>
60+
! CHECK: %[[CVT:.*]] = fir.convert %[[LOAD]] : (i32) -> i64
61+
! CHECK: fir.store %[[CVT]] to %[[ALLOCA]] : !fir.ref<i64>
62+
! CHECK: acc.atomic.read %[[Y_DECL]]#0 = %[[ALLOCA]] : !fir.ref<i64>, !fir.ref<i64>, i64
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
!RUN: %not_todo_cmd %flang_fc1 -emit-hlfir -fopenmp -o - %s 2>&1 | FileCheck %s
2+
3+
!CHECK: not yet implemented: atomic capture requiring implicit type casts
4+
subroutine capture_with_convert_f32_to_i32()
5+
implicit none
6+
integer :: k, v, i
7+
8+
k = 1
9+
v = 0
10+
11+
!$omp atomic capture
12+
v = k
13+
k = (i + 1) * 3.14
14+
!$omp end atomic
15+
end subroutine
16+
17+
subroutine capture_with_convert_i32_to_f64()
18+
real(8) :: x
19+
integer :: v
20+
x = 1.0
21+
v = 0
22+
!$omp atomic capture
23+
v = x
24+
x = v
25+
!$omp end atomic
26+
end subroutine capture_with_convert_i32_to_f64
27+
28+
subroutine capture_with_convert_f64_to_i32()
29+
integer :: x
30+
real(8) :: v
31+
x = 1
32+
v = 0
33+
!$omp atomic capture
34+
x = v
35+
v = x
36+
!$omp end atomic
37+
end subroutine capture_with_convert_f64_to_i32
38+
39+
subroutine capture_with_convert_i32_to_f32()
40+
real(4) :: x
41+
integer :: v
42+
x = 1.0
43+
v = 0
44+
!$omp atomic capture
45+
v = x
46+
x = x + v
47+
!$omp end atomic
48+
end subroutine capture_with_convert_i32_to_f32
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
! REQUIRES : openmp_runtime
2+
3+
! RUN: %flang_fc1 -emit-hlfir %openmp_flags %s -o - | FileCheck %s
4+
5+
! CHECK: func.func @_QPatomic_implicit_cast_read() {
6+
subroutine atomic_implicit_cast_read
7+
! CHECK: %[[ALLOCA3:.*]] = fir.alloca complex<f64>
8+
! CHECK: %[[ALLOCA2:.*]] = fir.alloca i32
9+
! CHECK: %[[ALLOCA1:.*]] = fir.alloca f64
10+
! CHECK: %[[ALLOCA0:.*]] = fir.alloca i32
11+
12+
13+
! CHECK: %[[M:.*]] = fir.alloca complex<f64> {bindc_name = "m", uniq_name = "_QFatomic_implicit_cast_readEm"}
14+
! CHECK: %[[M_DECL:.*]]:2 = hlfir.declare %[[M]] {uniq_name = "_QFatomic_implicit_cast_readEm"} : (!fir.ref<complex<f64>>) -> (!fir.ref<complex<f64>>, !fir.ref<complex<f64>>)
15+
! CHECK: %[[W:.*]] = fir.alloca complex<f32> {bindc_name = "w", uniq_name = "_QFatomic_implicit_cast_readEw"}
16+
! CHECK: %[[W_DECL:.*]]:2 = hlfir.declare %[[W]] {uniq_name = "_QFatomic_implicit_cast_readEw"} : (!fir.ref<complex<f32>>) -> (!fir.ref<complex<f32>>, !fir.ref<complex<f32>>)
17+
! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFatomic_implicit_cast_readEx"}
18+
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFatomic_implicit_cast_readEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
19+
! CHECK: %[[Y:.*]] = fir.alloca f32 {bindc_name = "y", uniq_name = "_QFatomic_implicit_cast_readEy"}
20+
! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {uniq_name = "_QFatomic_implicit_cast_readEy"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
21+
! CHECK: %[[Z:.*]] = fir.alloca f64 {bindc_name = "z", uniq_name = "_QFatomic_implicit_cast_readEz"}
22+
! CHECK: %[[Z_DECL:.*]]:2 = hlfir.declare %[[Z]] {uniq_name = "_QFatomic_implicit_cast_readEz"} : (!fir.ref<f64>) -> (!fir.ref<f64>, !fir.ref<f64>)
23+
integer :: x
24+
real :: y
25+
double precision :: z
26+
complex :: w
27+
complex(8) :: m
28+
29+
! CHECK: %[[LOAD:.*]] = fir.load %[[Y_DECL]]#0 : !fir.ref<f32>
30+
! CHECK: %[[CVT:.*]] = fir.convert %[[LOAD]] : (f32) -> i32
31+
! CHECK: fir.store %[[CVT]] to %[[ALLOCA0]] : !fir.ref<i32>
32+
! CHECK: omp.atomic.read %[[X_DECL]]#0 = %[[ALLOCA0]] : !fir.ref<i32>, !fir.ref<i32>, i32
33+
!$omp atomic read
34+
x = y
35+
36+
! CHECK: %[[LOAD:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32>
37+
! CHECK: %[[CVT:.*]] = fir.convert %[[LOAD]] : (i32) -> f64
38+
! CHECK: fir.store %[[CVT]] to %[[ALLOCA1]] : !fir.ref<f64>
39+
! CHECK: omp.atomic.read %[[Z_DECL]]#0 = %[[ALLOCA1]] : !fir.ref<f64>, !fir.ref<f64>, f64
40+
!$omp atomic read
41+
z = x
42+
43+
! CHECK: %[[LOAD:.*]] = fir.load %[[W_DECL]]#0 : !fir.ref<complex<f32>>
44+
! CHECK: %[[EXTRACT:.*]] = fir.extract_value %[[LOAD]], [0 : index] : (complex<f32>) -> f32
45+
! CHECK: %[[CVT:.*]] = fir.convert %[[EXTRACT]] : (f32) -> i32
46+
! CHECK: fir.store %[[CVT]] to %[[ALLOCA2]] : !fir.ref<i32>
47+
! CHECK: omp.atomic.read %[[X_DECL]]#0 = %[[ALLOCA2]] : !fir.ref<i32>, !fir.ref<i32>, i32
48+
!$omp atomic read
49+
x = w
50+
51+
! CHECK: %[[LOAD:.*]] = fir.load %[[W_DECL]]#0 : !fir.ref<complex<f32>>
52+
! CHECK: %[[CVT:.*]] = fir.convert %[[LOAD]] : (complex<f32>) -> complex<f64>
53+
! CHECK: fir.store %[[CVT]] to %[[ALLOCA3]] : !fir.ref<complex<f64>>
54+
! CHECK: omp.atomic.read %[[M_DECL]]#0 = %[[ALLOCA3]] : !fir.ref<complex<f64>>, !fir.ref<complex<f64>>, complex<f64>
55+
!$omp atomic read
56+
m = w
57+
end subroutine

llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -268,33 +268,6 @@ computeOpenMPScheduleType(ScheduleKind ClauseKind, bool HasChunks,
268268
return Result;
269269
}
270270

271-
/// Emit an implicit cast to convert \p XRead to type of variable \p V
272-
static llvm::Value *emitImplicitCast(IRBuilder<> &Builder, llvm::Value *XRead,
273-
llvm::Value *V) {
274-
// TODO: Add this functionality to the `AtomicInfo` interface
275-
llvm::Type *XReadType = XRead->getType();
276-
llvm::Type *VType = V->getType();
277-
if (llvm::AllocaInst *vAlloca = dyn_cast<llvm::AllocaInst>(V))
278-
VType = vAlloca->getAllocatedType();
279-
280-
if (XReadType->isStructTy() && VType->isStructTy())
281-
// No need to extract or convert. A direct
282-
// `store` will suffice.
283-
return XRead;
284-
285-
if (XReadType->isStructTy())
286-
XRead = Builder.CreateExtractValue(XRead, /*Idxs=*/0);
287-
if (VType->isIntegerTy() && XReadType->isFloatingPointTy())
288-
XRead = Builder.CreateFPToSI(XRead, VType);
289-
else if (VType->isFloatingPointTy() && XReadType->isIntegerTy())
290-
XRead = Builder.CreateSIToFP(XRead, VType);
291-
else if (VType->isIntegerTy() && XReadType->isIntegerTy())
292-
XRead = Builder.CreateIntCast(XRead, VType, true);
293-
else if (VType->isFloatingPointTy() && XReadType->isFloatingPointTy())
294-
XRead = Builder.CreateFPCast(XRead, VType);
295-
return XRead;
296-
}
297-
298271
/// Make \p Source branch to \p Target.
299272
///
300273
/// Handles two situations:
@@ -8683,8 +8656,6 @@ OpenMPIRBuilder::createAtomicRead(const LocationDescription &Loc,
86838656
}
86848657
}
86858658
checkAndEmitFlushAfterAtomic(Loc, AO, AtomicKind::Read);
8686-
if (XRead->getType() != V.Var->getType())
8687-
XRead = emitImplicitCast(Builder, XRead, V.Var);
86888659
Builder.CreateStore(XRead, V.Var, V.IsVolatile);
86898660
return Builder.saveIP();
86908661
}
@@ -8969,8 +8940,6 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createAtomicCapture(
89698940
return AtomicResult.takeError();
89708941
Value *CapturedVal =
89718942
(IsPostfixUpdate ? AtomicResult->first : AtomicResult->second);
8972-
if (CapturedVal->getType() != V.Var->getType())
8973-
CapturedVal = emitImplicitCast(Builder, CapturedVal, V.Var);
89748943
Builder.CreateStore(CapturedVal, V.Var, V.IsVolatile);
89758944

89768945
checkAndEmitFlushAfterAtomic(Loc, AO, AtomicKind::Capture);

0 commit comments

Comments
 (0)