@@ -316,3 +316,58 @@ loop:
316316exit:
317317  ret  void 
318318}
319+ 
320+ define  void  @retry_after_dep_check_with_unknown_offset (ptr  %A , i32  %offset ) {
321+ ; CHECK-LABEL: 'retry_after_dep_check_with_unknown_offset' 
322+ ; CHECK-NEXT:    loop: 
323+ ; CHECK-NEXT:      Report: unsafe dependent memory operations in loop. Use #pragma clang loop distribute(enable) to allow loop distribution to attempt to isolate the offending operations into a separate loop 
324+ ; CHECK-NEXT:  Unknown data dependence. 
325+ ; CHECK-NEXT:      Dependences: 
326+ ; CHECK-NEXT:        Unknown: 
327+ ; CHECK-NEXT:            %l.A = load float, ptr %A, align 4 -> 
328+ ; CHECK-NEXT:            store float 0.000000e+00, ptr %A.100.iv.offset.3, align 4 
329+ ; CHECK-EMPTY: 
330+ ; CHECK-NEXT:        Unknown: 
331+ ; CHECK-NEXT:            %l.A = load float, ptr %A, align 4 -> 
332+ ; CHECK-NEXT:            store float %l.A, ptr %A.100.iv, align 8 
333+ ; CHECK-EMPTY: 
334+ ; CHECK-NEXT:      Run-time memory checks: 
335+ ; CHECK-NEXT:      Grouped accesses: 
336+ ; CHECK-NEXT:        Group [[GRP16:0x[0-9a-f]+]]: 
337+ ; CHECK-NEXT:          (Low: %A High: (4 + %A)) 
338+ ; CHECK-NEXT:            Member: %A 
339+ ; CHECK-NEXT:        Group [[GRP17:0x[0-9a-f]+]]: 
340+ ; CHECK-NEXT:          (Low: (100 + (8 * (zext i32 %offset to i64))<nuw><nsw> + %A) High: (96 + (16 * (zext i32 %offset to i64))<nuw><nsw> + %A)) 
341+ ; CHECK-NEXT:            Member: {(100 + (8 * (zext i32 %offset to i64))<nuw><nsw> + %A),+,8}<%loop> 
342+ ; CHECK-NEXT:        Group [[GRP18:0x[0-9a-f]+]]: 
343+ ; CHECK-NEXT:          (Low: (100 + %A) High: (96 + (8 * (zext i32 %offset to i64))<nuw><nsw> + %A)) 
344+ ; CHECK-NEXT:            Member: {(100 + %A),+,8}<%loop> 
345+ ; CHECK-EMPTY: 
346+ ; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop. 
347+ ; CHECK-NEXT:      SCEV assumptions: 
348+ ; CHECK-NEXT:      {(100 + %A),+,8}<%loop> Added Flags: <nusw> 
349+ ; CHECK-NEXT:      {(100 + (8 * (zext i32 %offset to i64))<nuw><nsw> + %A),+,8}<%loop> Added Flags: <nusw> 
350+ ; CHECK-EMPTY: 
351+ ; CHECK-NEXT:      Expressions re-written: 
352+ ; 
353+ entry:
354+   %A.100  = getelementptr  i8 , ptr  %A , i64  100 
355+   %offset.ext  = zext  i32  %offset  to  i64 
356+   br  label  %loop 
357+ 
358+ loop:
359+   %iv  = phi  i64  [ 0 , %entry  ], [ %iv.next , %loop  ]
360+   %l.A  = load  float , ptr  %A , align  4 
361+   %A.100.iv  = getelementptr  { float , float  }, ptr  %A.100 , i64  %iv 
362+   store  float  %l.A , ptr  %A.100.iv , align  8 
363+   %iv.offset  = add  i64  %iv , %offset.ext 
364+   %iv.offset.3  = shl  i64  %iv.offset , 3 
365+   %A.100.iv.offset.3  = getelementptr  i8 , ptr  %A.100 , i64  %iv.offset.3 
366+   store  float  0 .0 , ptr  %A.100.iv.offset.3 , align  4 
367+   %iv.next  = add  i64  %iv , 1 
368+   %ec  = icmp  eq  i64  %iv.next , %offset.ext 
369+   br  i1  %ec , label  %exit , label  %loop 
370+ 
371+ exit:
372+   ret  void 
373+ }
0 commit comments