[LLVMdev] LLVM and OpenMP

Chris Lattner sabre at nondot.org
Thu Nov 29 18:21:18 CST 2007


On Fri, 30 Nov 2007, Anton Korobeynikov wrote:
> I've just commited a patch to llvm-gcc 4.2, which moves openmp lowering
> stuff to be run little bit earlier, so llvm-convert will catch its
> result. It looks now gcc atomic & sync builtins should be introduced to
> llvm as a remaining ingredient.
>
> Example program from Diego's paper now compiles to:

Very nice Anton!!

-Chris

> @.str = internal constant [10 x i8] c"sum = %d\0A\00"           ; <[10 x
> i8]*> [#uses=1]
>
> define i32 @main() {
> entry:
>        %sum = alloca i32               ; <i32*> [#uses=3]
>        %.omp_data_o.3 = alloca %struct..omp_data_s.1           ; <%
> struct..omp_data_s.1*> [#uses=2]
>        store i32 0, i32* %sum, align 4
>        %tmp = getelementptr %struct..omp_data_s.1* %.omp_data_o.3, i32
> 0, i32 0                ; <i32**> [#uses=1]
>        store i32* %sum, i32** %tmp, align 8
>        %.omp_data_o.31 = bitcast %struct..omp_data_s.1* %.omp_data_o.3
> to i8*          ; <i8*> [#uses=2]
>        call void @GOMP_parallel_start( void (i8*)* @main.omp_fn.0, i8*
> %.omp_data_o.31, i32 0 ) nounwind
>        call void @main.omp_fn.0( i8* %.omp_data_o.31 )
>        call void @GOMP_parallel_end( ) nounwind
>        %tmp3 = load i32* %sum, align 4         ; <i32> [#uses=1]
>        %tmp5 = call i32 (i8*, ...)* @printf( i8* getelementptr ([10 x
> i8]* @.str, i32 0, i32 0), i32 %tmp3 ) nounwind      $
>        ret i32 undef
> }
>
> define internal void @main.omp_fn.0(i8* %.omp_data_i) {
> entry:
>        %tmp1 = tail call i32 (...)*
> @omp_get_thread_num( )             ; <i32> [#uses=1]
>        %tmp3 = bitcast i8* %.omp_data_i to i32**               ;
> <i32**> [#uses=1]
>        %tmp4 = load i32** %tmp3, align 4               ; <i32*>
> [#uses=1]
>        %tmp45 = bitcast i32* %tmp4 to i8*              ; <i8*>
> [#uses=1]
>        %tmp6 = tail call i32 @__sync_fetch_and_add_4( i8* %tmp45, i32 %
> tmp1 ) nounwind                 ; <i32> [#uses=0]
>        ret void
> }
>
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/


More information about the LLVMdev mailing list