From da0fd933156e20c02e276f62bfefb27e40b0b360 Mon Sep 17 00:00:00 2001 From: Matt Pharr Date: Fri, 22 Jul 2011 12:36:44 +0100 Subject: [PATCH] AVX fixes: add missing 8/16-bit gathers and scatters, set features string appropriately when AVX is enabled. --- module.cpp | 12 +++++++----- stdlib-avx.ll | 6 +++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/module.cpp b/module.cpp index cc9e0b7c..56162ba9 100644 --- a/module.cpp +++ b/module.cpp @@ -949,10 +949,12 @@ Module::writeObjectFileOrAssembly(OutputType outputType, const char *outFileName } std::string featuresString; + llvm::TargetMachine *targetMachine = NULL; #if defined LLVM_3_0svn || defined LLVM_3_0 - llvm::TargetMachine *targetMachine = - target->createTargetMachine(triple.getTriple(), g->target.cpu, - featuresString); + if (g->target.isa == Target::AVX) + featuresString = "+avx"; + targetMachine = target->createTargetMachine(triple.getTriple(), g->target.cpu, + featuresString); #else if (g->target.cpu.size()) { llvm::SubtargetFeatures features; @@ -960,8 +962,8 @@ Module::writeObjectFileOrAssembly(OutputType outputType, const char *outFileName featuresString = features.getString(); } - llvm::TargetMachine *targetMachine = - target->createTargetMachine(triple.getTriple(), featuresString); + targetMachine = target->createTargetMachine(triple.getTriple(), + featuresString); #endif if (targetMachine == NULL) { fprintf(stderr, "Unable to create target machine for target \"%s\"!", diff --git a/stdlib-avx.ll b/stdlib-avx.ll index de7f87fa..897c55a0 100644 --- a/stdlib-avx.ll +++ b/stdlib-avx.ll @@ -698,12 +698,16 @@ define void @__masked_store_blend_64(<8 x i64>* nocapture %ptr, <8 x i64> %new, ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; gather/scatter +gen_gather(8, i8) +gen_gather(8, i16) gen_gather(8, i32) gen_gather(8, i64) + +gen_scatter(8, i8) +gen_scatter(8, i16) gen_scatter(8, i32) gen_scatter(8, i64) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; double precision sqrt