@@ -38,8 +38,7 @@ static void EmitMemoryBarrier(CodeGenFunction &CGF,
38
38
StoreLoad ? True : False,
39
39
StoreStore ? True : False,
40
40
Device ? True : False };
41
- CGF.Builder .CreateCall (CGF.CGM .getIntrinsic (Intrinsic::memory_barrier),
42
- C, C + 5 );
41
+ CGF.Builder .CreateCall (CGF.CGM .getIntrinsic (Intrinsic::memory_barrier), C);
43
42
}
44
43
45
44
// / Emit the conversions required to turn the given value into an
@@ -69,14 +68,14 @@ static Value *EmitFromInt(CodeGenFunction &CGF, llvm::Value *V,
69
68
// The atomic builtins are also full memory barriers. This is a utility for
70
69
// wrapping a call to the builtins with memory barriers.
71
70
static Value *EmitCallWithBarrier (CodeGenFunction &CGF, Value *Fn,
72
- Value **ArgBegin, Value **ArgEnd ) {
71
+ ArrayRef< Value *> Args ) {
73
72
// FIXME: We need a target hook for whether this applies to device memory or
74
73
// not.
75
74
bool Device = true ;
76
75
77
76
// Create barriers both before and after the call.
78
77
EmitMemoryBarrier (CGF, true , true , true , true , Device);
79
- Value *Result = CGF.Builder .CreateCall (Fn, ArgBegin, ArgEnd );
78
+ Value *Result = CGF.Builder .CreateCall (Fn, Args );
80
79
EmitMemoryBarrier (CGF, true , true , true , true , Device);
81
80
return Result;
82
81
}
@@ -109,7 +108,7 @@ static RValue EmitBinaryAtomic(CodeGenFunction &CGF,
109
108
const llvm::Type *ValueType = Args[1 ]->getType ();
110
109
Args[1 ] = EmitToInt (CGF, Args[1 ], T, IntType);
111
110
112
- llvm::Value *Result = EmitCallWithBarrier (CGF, AtomF, Args, Args + 2 );
111
+ llvm::Value *Result = EmitCallWithBarrier (CGF, AtomF, Args);
113
112
Result = EmitFromInt (CGF, Result, T, ValueType);
114
113
return RValue::get (Result);
115
114
}
@@ -144,7 +143,7 @@ static RValue EmitBinaryAtomicPost(CodeGenFunction &CGF,
144
143
Args[1 ] = EmitToInt (CGF, Args[1 ], T, IntType);
145
144
Args[0 ] = CGF.Builder .CreateBitCast (DestPtr, IntPtrType);
146
145
147
- llvm::Value *Result = EmitCallWithBarrier (CGF, AtomF, Args, Args + 2 );
146
+ llvm::Value *Result = EmitCallWithBarrier (CGF, AtomF, Args);
148
147
Result = CGF.Builder .CreateBinOp (Op, Result, Args[1 ]);
149
148
Result = EmitFromInt (CGF, Result, T, ValueType);
150
149
return RValue::get (Result);
@@ -879,7 +878,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
879
878
Args[1 ] = EmitToInt (*this , Args[1 ], T, IntType);
880
879
Args[2 ] = EmitToInt (*this , EmitScalarExpr (E->getArg (2 )), T, IntType);
881
880
882
- Value *Result = EmitCallWithBarrier (*this , AtomF, Args, Args + 3 );
881
+ Value *Result = EmitCallWithBarrier (*this , AtomF, Args);
883
882
Result = EmitFromInt (*this , Result, T, ValueType);
884
883
return RValue::get (Result);
885
884
}
@@ -908,7 +907,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
908
907
Args[2 ] = EmitToInt (*this , EmitScalarExpr (E->getArg (2 )), T, IntType);
909
908
910
909
Value *OldVal = Args[1 ];
911
- Value *PrevVal = EmitCallWithBarrier (*this , AtomF, Args, Args + 3 );
910
+ Value *PrevVal = EmitCallWithBarrier (*this , AtomF, Args);
912
911
Value *Result = Builder.CreateICmpEQ (PrevVal, OldVal);
913
912
// zext bool to int.
914
913
Result = Builder.CreateZExt (Result, ConvertType (E->getType ()));
@@ -957,7 +956,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
957
956
EmitScalarExpr (E->getArg (3 )),
958
957
EmitScalarExpr (E->getArg (4 ))
959
958
};
960
- Builder.CreateCall (CGM.getIntrinsic (Intrinsic::memory_barrier), C, C + 5 );
959
+ Builder.CreateCall (CGM.getIntrinsic (Intrinsic::memory_barrier), C);
961
960
return RValue::get (0 );
962
961
}
963
962
@@ -1075,7 +1074,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
1075
1074
Args.push_back (ArgValue);
1076
1075
}
1077
1076
1078
- Value *V = Builder.CreateCall (F, Args. data (), Args. data () + Args. size () );
1077
+ Value *V = Builder.CreateCall (F, Args);
1079
1078
QualType BuiltinRetType = E->getType ();
1080
1079
1081
1080
const llvm::Type *RetTy = llvm::Type::getVoidTy (getLLVMContext ());
@@ -1152,7 +1151,7 @@ Value *CodeGenFunction::EmitNeonCall(Function *F, SmallVectorImpl<Value*> &Ops,
1152
1151
else
1153
1152
Ops[j] = Builder.CreateBitCast (Ops[j], ai->getType (), name);
1154
1153
1155
- return Builder.CreateCall (F, Ops. begin (), Ops. end () , name);
1154
+ return Builder.CreateCall (F, Ops, name);
1156
1155
}
1157
1156
1158
1157
Value *CodeGenFunction::EmitNeonShiftVector (Value *V, const llvm::Type *Ty,
@@ -1200,8 +1199,7 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
1200
1199
const llvm::Type *Ty = CGM.getTypes ().ConvertType (FD->getType ());
1201
1200
const llvm::FunctionType *FTy = cast<llvm::FunctionType>(Ty);
1202
1201
llvm::StringRef Name = FD->getName ();
1203
- return Builder.CreateCall (CGM.CreateRuntimeFunction (FTy, Name),
1204
- Ops.begin (), Ops.end ());
1202
+ return Builder.CreateCall (CGM.CreateRuntimeFunction (FTy, Name), Ops);
1205
1203
}
1206
1204
1207
1205
if (BuiltinID == ARM::BI__builtin_arm_ldrexd) {
@@ -1262,7 +1260,7 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
1262
1260
1263
1261
// Call the appropriate intrinsic.
1264
1262
Function *F = CGM.getIntrinsic (Int, Ty);
1265
- return Builder.CreateCall (F, Ops. begin (), Ops. end () , " vcvtr" );
1263
+ return Builder.CreateCall (F, Ops, " vcvtr" );
1266
1264
}
1267
1265
1268
1266
// Determine the type of this overloaded NEON intrinsic.
@@ -1459,7 +1457,9 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
1459
1457
Ops[2 ] = Builder.CreateBitCast (Ops[2 ], Ty);
1460
1458
Ops[3 ] = Builder.CreateBitCast (Ops[3 ], Ty);
1461
1459
Ops.push_back (GetPointeeAlignment (*this , E->getArg (1 )));
1462
- Ops[1 ] = Builder.CreateCall (F, Ops.begin () + 1 , Ops.end (), " vld2_lane" );
1460
+ Ops[1 ] = Builder.CreateCall (F,
1461
+ ArrayRef<Value *>(Ops.begin () + 1 , Ops.end ()),
1462
+ " vld2_lane" );
1463
1463
Ty = llvm::PointerType::getUnqual (Ops[1 ]->getType ());
1464
1464
Ops[0 ] = Builder.CreateBitCast (Ops[0 ], Ty);
1465
1465
return Builder.CreateStore (Ops[1 ], Ops[0 ]);
@@ -1471,7 +1471,9 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
1471
1471
Ops[3 ] = Builder.CreateBitCast (Ops[3 ], Ty);
1472
1472
Ops[4 ] = Builder.CreateBitCast (Ops[4 ], Ty);
1473
1473
Ops.push_back (GetPointeeAlignment (*this , E->getArg (1 )));
1474
- Ops[1 ] = Builder.CreateCall (F, Ops.begin () + 1 , Ops.end (), " vld3_lane" );
1474
+ Ops[1 ] = Builder.CreateCall (F,
1475
+ ArrayRef<Value *>(Ops.begin () + 1 , Ops.end ()),
1476
+ " vld3_lane" );
1475
1477
Ty = llvm::PointerType::getUnqual (Ops[1 ]->getType ());
1476
1478
Ops[0 ] = Builder.CreateBitCast (Ops[0 ], Ty);
1477
1479
return Builder.CreateStore (Ops[1 ], Ops[0 ]);
@@ -1484,7 +1486,9 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
1484
1486
Ops[4 ] = Builder.CreateBitCast (Ops[4 ], Ty);
1485
1487
Ops[5 ] = Builder.CreateBitCast (Ops[5 ], Ty);
1486
1488
Ops.push_back (GetPointeeAlignment (*this , E->getArg (1 )));
1487
- Ops[1 ] = Builder.CreateCall (F, Ops.begin () + 1 , Ops.end (), " vld3_lane" );
1489
+ Ops[1 ] = Builder.CreateCall (F,
1490
+ ArrayRef<Value *>(Ops.begin () + 1 , Ops.end ()),
1491
+ " vld3_lane" );
1488
1492
Ty = llvm::PointerType::getUnqual (Ops[1 ]->getType ());
1489
1493
Ops[0 ] = Builder.CreateBitCast (Ops[0 ], Ty);
1490
1494
return Builder.CreateStore (Ops[1 ], Ops[0 ]);
@@ -1536,7 +1540,7 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
1536
1540
Args.push_back (CI);
1537
1541
Args.push_back (GetPointeeAlignment (*this , E->getArg (1 )));
1538
1542
1539
- Ops[1 ] = Builder.CreateCall (F, Args. begin (), Args. end () , " vld_dup" );
1543
+ Ops[1 ] = Builder.CreateCall (F, Args, " vld_dup" );
1540
1544
// splat lane 0 to all elts in each vector of the result.
1541
1545
for (unsigned i = 0 , e = STy->getNumElements (); i != e; ++i) {
1542
1546
Value *Val = Builder.CreateExtractValue (Ops[1 ], i);
@@ -2023,7 +2027,7 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
2023
2027
break ;
2024
2028
}
2025
2029
llvm::Function *F = CGM.getIntrinsic (ID);
2026
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , name);
2030
+ return Builder.CreateCall (F, Ops, name);
2027
2031
}
2028
2032
case X86::BI__builtin_ia32_vec_init_v8qi:
2029
2033
case X86::BI__builtin_ia32_vec_init_v4hi:
@@ -2083,15 +2087,15 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
2083
2087
break ;
2084
2088
}
2085
2089
llvm::Function *F = CGM.getIntrinsic (ID);
2086
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , name);
2090
+ return Builder.CreateCall (F, Ops, name);
2087
2091
}
2088
2092
case X86::BI__builtin_ia32_cmpps: {
2089
2093
llvm::Function *F = CGM.getIntrinsic (Intrinsic::x86_sse_cmp_ps);
2090
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , " cmpps" );
2094
+ return Builder.CreateCall (F, Ops, " cmpps" );
2091
2095
}
2092
2096
case X86::BI__builtin_ia32_cmpss: {
2093
2097
llvm::Function *F = CGM.getIntrinsic (Intrinsic::x86_sse_cmp_ss);
2094
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , " cmpss" );
2098
+ return Builder.CreateCall (F, Ops, " cmpss" );
2095
2099
}
2096
2100
case X86::BI__builtin_ia32_ldmxcsr: {
2097
2101
const llvm::Type *PtrTy = Int8PtrTy;
@@ -2111,11 +2115,11 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
2111
2115
}
2112
2116
case X86::BI__builtin_ia32_cmppd: {
2113
2117
llvm::Function *F = CGM.getIntrinsic (Intrinsic::x86_sse2_cmp_pd);
2114
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , " cmppd" );
2118
+ return Builder.CreateCall (F, Ops, " cmppd" );
2115
2119
}
2116
2120
case X86::BI__builtin_ia32_cmpsd: {
2117
2121
llvm::Function *F = CGM.getIntrinsic (Intrinsic::x86_sse2_cmp_sd);
2118
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , " cmpsd" );
2122
+ return Builder.CreateCall (F, Ops, " cmpsd" );
2119
2123
}
2120
2124
case X86::BI__builtin_ia32_storehps:
2121
2125
case X86::BI__builtin_ia32_storelps: {
@@ -2159,7 +2163,7 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
2159
2163
2160
2164
// create i32 constant
2161
2165
llvm::Function *F = CGM.getIntrinsic (Intrinsic::x86_mmx_psrl_q);
2162
- return Builder.CreateCall (F, &Ops[0 ], &Ops[ 0 ] + 2 , " palignr" );
2166
+ return Builder.CreateCall (F, ArrayRef<Value *>( &Ops[0 ], 2 ) , " palignr" );
2163
2167
}
2164
2168
2165
2169
// If palignr is shifting the pair of vectors more than 32 bytes, emit zero.
@@ -2189,7 +2193,7 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
2189
2193
2190
2194
// create i32 constant
2191
2195
llvm::Function *F = CGM.getIntrinsic (Intrinsic::x86_sse2_psrl_dq);
2192
- return Builder.CreateCall (F, &Ops[0 ], &Ops[ 0 ] + 2 , " palignr" );
2196
+ return Builder.CreateCall (F, ArrayRef<Value *>( &Ops[0 ], 2 ) , " palignr" );
2193
2197
}
2194
2198
2195
2199
// If palignr is shifting the pair of vectors more than 32 bytes, emit zero.
@@ -2341,7 +2345,7 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
2341
2345
break ;
2342
2346
}
2343
2347
llvm::Function *F = CGM.getIntrinsic (ID);
2344
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , name);
2348
+ return Builder.CreateCall (F, Ops, name);
2345
2349
}
2346
2350
}
2347
2351
}
@@ -2397,7 +2401,7 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
2397
2401
break ;
2398
2402
}
2399
2403
llvm::Function *F = CGM.getIntrinsic (ID);
2400
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , " " );
2404
+ return Builder.CreateCall (F, Ops, " " );
2401
2405
}
2402
2406
2403
2407
// vec_st
@@ -2430,7 +2434,7 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
2430
2434
break ;
2431
2435
}
2432
2436
llvm::Function *F = CGM.getIntrinsic (ID);
2433
- return Builder.CreateCall (F, & Ops[ 0 ], &Ops[ 0 ] + Ops. size () , " " );
2437
+ return Builder.CreateCall (F, Ops, " " );
2434
2438
}
2435
2439
}
2436
2440
return 0 ;
0 commit comments